Objetivo da aula
- Compreender o conceito de funções em Python e sua equivalência com os MyBlocks do SPIKE Prime.
- Aprender a trabalhar com entradas (inputs) e saídas (outputs) de funções.
- Escrever funções que possam ser reutilizadas em diferentes missões e partes do robô.
- Aplicar boas práticas para modularizar o código no PyBricks.
1. Das MyBlocks às Funções em Python
No aplicativo do SPIKE Prime, usamos os MyBlocks para criar “blocos personalizados” que agrupam vários comandos.
No PyBricks, fazemos exatamente a mesma coisa — mas com mais poder e flexibilidade — usando funções.
Assim como um MyBlock, uma função pode:
- Receber informações (entradas);
- Executar uma sequência de comandos;
- Retornar um resultado (saída).
A grande diferença é que, no PyBricks, isso é feito por texto e com total controle sobre a lógica interna.
2. Estrutura básica de uma função
A palavra-chave def (de “define”) é usada para criar uma função.
Veja o formato geral:
def nome_da_funcao(parametros): # Ações da função ... return valor
3. Input e Output — Entradas e Saídas
Funções podem receber valores de entrada (input) e devolver resultados de saída (output).
- Input (entrada): são as variáveis que a função recebe — ex.: velocidade, ângulo, distância.
- Output (saída): é o valor que a função retorna após processar as informações — ex.: leitura de um sensor, resultado de um cálculo.
No SPIKE, isso seria equivalente a MyBlock com parâmetros e saída.
Exemplo 1 – Função com entrada e sem saída
Como um MyBlock que apenas executa uma tarefa.
def mover(motorE, motorD, velocidade, angulo):
motorE.run_angle(velocidade, angulo)
motorD.run_angle(velocidade, angulo)
# Chamada
mover(motor_esquerdo, motor_direito, 400, 360)
Exemplo 2 – Função com entrada e saída
Como um MyBlock que devolve um valor (por exemplo, a distância medida).
def medir_distancia(sensor): leitura = sensor.distance() return leitura # Chamada e uso do resultado: distancia = medir_distancia(sensor_ultrassonico) if distancia < 100: hub.light.on(Color.RED) else: hub.light.on(Color.GREEN)
Explicando o fluxo:
sensor→ é a entrada (input) da função.leitura→ é a variável processada dentro da função.return leitura→ é a saída (output) devolvida ao programa.
Assim como nos MyBlocks que retornam valores (por exemplo, cor ou distância), o Python também “envia de volta” o resultado para ser usado em outro ponto do programa.
4. Comparando MyBlocks e Funções
| No SPIKE App | No PyBricks (Python) |
|---|---|
| MyBlock “Ir Reto” | def ir_reto(...): |
| Entrada “Velocidade” e “Ângulo” | Parâmetros velocidade e angulo |
| Bloco executa o movimento | Corpo da função com comandos do motor |
| Bloco devolve a distância lida | return leitura |
5. Funções com valores padrão
Assim como no MyBlock é possível deixar uma entrada com valor “pré-definido”, no Python usamos valores padrão nos parâmetros:
def ir_reto(mE, mD, angulo=360, vel=400): mE.run_angle(vel, angulo) mD.run_angle(vel, angulo) # Chamadas possíveis: ir_reto(mE, mD) # usa 360° e 400 como padrão ir_reto(mE, mD, 720, 500) # sobrescreve padrões
6. Criando funções reutilizáveis de verdade
O segredo está em criar pequenas funções que resolvem partes específicas da missão — e depois combiná-las.
def alinhar(mE, mD): mE.run_angle(300, 180) mD.run_angle(300, 180) def entregar_objeto(mE, mD, sensor): alinhar(mE, mD) if medir_distancia(sensor) > 200: ir_reto(mE, mD, 720, 400) else: hub.light.on(Color.RED)
Assim como um MyBlock que “chama outro MyBlock”, no PyBricks também podemos chamar funções dentro de funções.
7. Analogia simples
- Função = MyBlock
- Parâmetros = Entradas do MyBlock
- Return = Saída do MyBlock
Isso ajuda os alunos que estão migrando da programação por blocos a entenderem que o raciocínio é o mesmo — apenas mais livre e poderoso.
Atividade prática
- Crie uma função
ler_distancia()que devolva o valor lido do sensor ultrassônico. - Crie uma função
avancar()com parâmetrosvelocidadeeangulo. - Crie uma função
executar_missao()que use ambas — o robô só avança se a distância for maior que 200 mm. - Teste diferentes valores de entrada e observe o comportamento do robô.