Suporte ao Professor
Preparar
• Certifique-se de que os hubs SPIKE Prime estejam carregados, especialmente se estiverem conectados por Bluetooth.
Material do Aluno
---------------------
Envolver
( Discussão em grupo, 5 minutos )
Peça aos alunos que fiquem de pé com os pés juntos. Peça a todos que levantem o pé direito e movam o corpo levemente para a direita, colocando o pé direito no chão. Em seguida, pegue o pé esquerdo e mova o corpo ligeiramente para a esquerda, colocando o pé esquerdo no chão. Faça com que a classe trabalhe em conjunto e faça com que todos se movam juntos 5 vezes em cada direção.
Peça aos alunos que escrevam um pseudocódigo para as ações que acabaram de ser executadas, usando um loop for.
Perguntas para investigar
• Quais são as maneiras de tornar os programas mais eficientes?
--
Explorar
( Pequenos Grupos, 20 minutos )
Os alunos explorarão a programação do modelo Coach para mover usando um loop for.
Oriente os alunos a construir o modelo Coach usando as instruções de construção fornecidas em https://education.lego.com/en-us/support/spike-prime/building-instructions .
Oriente os alunos a abrir um novo projeto na tela de programação Python. Peça aos alunos para apagar qualquer código que já esteja na área de programação. Os alunos devem conectar seu hub.
Comece a se mover
Peça aos alunos para examinar a forma como o modelo do Coach é construído e fazer um brainstorming de como o modelo pode ser programado para conduzir um treino ou dança (movimento para frente e para trás) para nós.
Forneça aos alunos este programa de amostra para discutir como fazer o modelo Coach se mover para nos conduzir em um exercício. Peça aos alunos que expliquem o programa e façam sugestões para torná-lo mais eficiente.
Exemplo de programa:
from spike import Motor
# initialize motors and set variable names
motor_b=Motor('B')
motor_f=Motor('F')
# run motors in alternating moves to create a dance
motor_f.run_for_seconds(0.4, 30)
motor_b.run_for_seconds(0.4, 30)
motor_f.run_for_seconds(0.4, -30)
motor_b.run_for_seconds(0.4, -30)
motor_f.run_for_seconds(0.4, 30)
motor_b.run_for_seconds(0.4, 30)
motor_f.run_for_seconds(0.4, -30)
motor_b.run_for_seconds(0.4, -30)
Solicite aos alunos, conforme necessário, que alterem o código de repetir várias linhas para incluir um loop. Os alunos precisarão decidir quantas vezes desejam repetir o loop.
Saliente aos alunos que neste exercício, o treinador quer que movamos um pé (motor) e depois o outro motor. Lembre aos alunos que eles precisam ser cuidadosos para nomear cada motor com algo específico para distinguir entre os dois. Nomear variáveis antecipadamente é uma etapa importante para reutilizar facilmente essas informações em todo o programa. Discuta ideias para nomear as variáveis do motor, como usar a porta à qual cada motor está conectado, conforme visto no programa de amostra.
Dê tempo para que os alunos modifiquem e testem seu programa para permitir que seu treinador se mova. Se os alunos precisarem de ajuda, eles devem utilizar a Base de Conhecimento e suas anotações. Lembre-os também de observar o console em busca de qualquer mensagem de erro que possam receber.
Se necessário, forneça este código de exemplo aos alunos.
from spike import Motor
# initialize motors and set variable names
motor_b=Motor('B')
motor_f=Motor('F')
# run motors in alternating moves 10 times
for count in range(10):
motor_f.run_for_seconds(0.4, 30)
motor_b.run_for_seconds(0.4, 30)
motor_f.run_for_seconds(0.4, -30)
motor_b.run_for_seconds(0.4, -30)
Permita que os alunos explorem o programa, alterando diferentes valores, para ver como o modelo de treinador se move.
--
Explicar
( Grupo inteiro, 5 minutos )
Discuta com os alunos como o programa funcionou.
Faça perguntas aos alunos como:
• Como você tornou seu programa mais eficiente?
• O que a parte “dentro do alcance” do código diz ao modelo para fazer?
• O que acontece quando o programa termina a contagem?
--
Elaborar
( Pequenos Grupos, 10 minutos )
Desafie os alunos a reconhecer bugs em programas de loop.
Mostre aos alunos cada programa e mensagem de erro. Peça aos alunos que discutam o que precisa mudar em cada linha de código para corrigir o bug. Considere fazer as alterações como uma classe e garantir que o programa seja executado corretamente após cada alteração.
Depuração Atividade 1:
Reconhecer um bug no código do loop.
from spike import Motor
# initialize motors and set variable names
motor_b=Motor('B')
motor_f=Motor('F')
# run motors in alternating moves 10 times
for count in range():
motor_f.run_for_seconds(0.4, 30)
motor_b.run_for_seconds(0.4, 30)
motor_f.run_for_seconds(0.4, -30)
motor_b.run_for_seconds(0.4, -30)
File "lib/hub/flash/programrunner/__init__.py", line 1, in start_program
File "./projects/48509.py", line 8
TypeError: function missing 1 required positional arguments
Os alunos devem reconhecer que o erro está na linha 8. A função de loop está faltando uma peça necessária, o argumento posicional, que é o número de vezes que você deseja que o loop seja executado. Peça aos alunos que identifiquem o número que deve ser incluído. Embora qualquer número funcione, os alunos podem usar o comentário como uma dica.
Atividade de Depuração 2:
Reconhecer um bug na variável do motor.
from spike import Motor
# initialize motors and set variable names
motor_b=Motor('B')
motor_f=Motor('F')
# run motors in alternating moves 10 times
for count in range(10):
motor_f.run_for_seconds(0.4, 30)
motor_b.run_for_seconds(0.4, 30)
motor_f.run_for_seconds(0.4, -30)
motor.run_for_seconds(0.4, -30)
File "lib/hub/flash/programrunner/__init__.py", line 1, in start_program
File "./projects/7232.py", line 13
NameError: name 'motor' isn't defined
Os alunos devem reconhecer que o erro está apontando para a linha 13 e dizendo que o motor não está definido. O motor não corresponde aos dois nomes de motor que fornecemos. Peça aos alunos que renomeiem o motor para motor_b.
Depuração Atividade 3:
Reconhecer um bug na estrutura do programa.
from spike import Motor
# initialize motors and set variable names
motor_b=Motor('B')
motor_f=Motor('F')
# run motors in alternating moves 10 times
for count in range(10):
motor_f.run_for_seconds(0.4, 30)
motor_b.run_for_seconds(0.4, 30)
motor_f.run_for_seconds(0.4, -30)
motor_b.run_for_seconds(0.4, -30)
File "lib/hub/flash/programrunner/__init__.py", line 1, in start_program
File "./projects/13982.py", line 9
SyntaxError: invalid syntax
Os alunos devem reconhecer que há um erro na linha 9. A sintaxe inválida significa que o programa não pode reconhecer o comando dado para convertê-lo. Peça aos alunos que identifiquem que fornecemos uma linha de código de loop for, mas não informamos ao loop o que fazer porque não indentamos a próxima linha de código. Cada linha que você deseja incluir no loop precisa ser recuada.
Os alunos também devem reconhecer que a linha 10 também precisará ser recuada. Peça aos alunos que pensem por que nenhuma mensagem de erro foi fornecida para a linha 10. O erro é fornecido apenas para a primeira linha de código que cria um problema. Explique aos alunos que isso pode significar que você perdeu um erro enquanto corrigia outro.
Atividade de depuração 4:
Outro problema que pode acontecer é criar um erro que o programa não reconhece como um erro.
from spike import Motor
# initialize motors and set variable names
motor_b=Motor('B')
motor_f=Motor('F')
# run motors in alternating moves 10 times
for count in range(10):
motor_f.run_for_seconds(0.4, 30)
motor_b.run_for_seconds(0.4, 30)
motor_f.run_for_seconds(0.4, -30)
motor_b.run_for_seconds(0.4, -30)
Mostre aos alunos o código da Atividade 3 com a linha 9 recuada, ou seja, a correção do erro anterior. No entanto, o que acontece se não recuarmos a linha 10? Peça aos alunos que prevejam o novo erro que ocorrerá.
File "lib/hub/flash/programrunner/__init__.py", line 1, in start_program
File "./projects/5045.py", line 12
IndentationError: unexpected indent
Mostre aos alunos a mensagem de erro. Embora os alunos pudessem esperar um erro na linha 10 por não recuar, o erro real ocorreu na linha 12. Peça aos alunos que pensem sobre o que o programa estava fazendo. Explique que o programa leu o loop na linha 8 que se conectou à ação para loop na linha 9 (a conexão indicada pelo recuo). Quando a linha 10 não foi recuada, o programa leu que o loop terminou. Porém, ao ver um recuo na linha 12, o programa ficou confuso. Não havia nada exigindo um recuo, então o programa leu um erro.
Discuta as várias mensagens de erro e as maneiras de solucioná-las com a classe.
--
Avaliar
( Exercício em grupo, 5 minutos )
Observação do Professor:
Discuta o programa com os alunos.
Faça perguntas aos alunos como:
• Quais são os métodos para tornar os programas mais eficientes?
• Como os loops podem ser usados?
• Que ações você deve tomar ao receber uma mensagem de erro?
• Por que os engenheiros fariam um robô se mover repetidamente?
Autoavaliação:
Peça aos alunos que respondam o seguinte em seus diários:
• O que você aprendeu hoje sobre como criar programas com loops livres de erros?
• Que dicas de depuração você aprendeu hoje?
• Que características de um bom companheiro de equipe eu demonstrei hoje?
• Peça aos alunos para avaliarem a si mesmos em uma escala de 1 a 3, em sua gestão de tempo hoje.
• Peça ao aluno para avaliar a si mesmo em uma escala de 1 a 3, em seu gerenciamento de materiais (peças) hoje.