top of page

SP-101

SPIKE Prime

Image-empty-state.png

30-45 min

Item 1

Iniciante

Loop de dança com treinador

Observe que esta lição é baseada no código Python usado no aplicativo LEGO ® Education SPIKE ™ Legacy.
Os alunos praticarão o uso de loops for em seus programas para torná-los mais eficientes

Aula criada por:

LEGO® Education

Suporte ao Professor

Objetivos da Aula

Os alunos irão:
• Programar um modelo usando loops for.
• Depure quatro programas para aprender dicas e truques.

Preparar

• Certifique-se de que os hubs SPIKE Prime estejam carregados, especialmente se estiverem conectados por Bluetooth.

Material do Aluno

---------------------

Image-empty-state.png

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?

 

--

Image-empty-state.png

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.

--

Image-empty-state.png

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?

--

Image-empty-state.png

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.

--

Dicas para o professor

Diferenciar

bottom of page