Lição 4: Fluxo do Projeto com Loops Aninhados
Recolha os próximos dois discos
-
Agora que o Robô VR está voltado para os discos vermelhos, o Robô VR precisará repetir os mesmos comportamentos que foram usados para coletar o disco azul, a fim de pegar e mover o disco vermelho. Os comportamentos de avançar para pegar o disco, virar e voltar para o mesmo objetivo colorido de soltar o disco.
-
Uma vez que o primeiro disco vermelho é movido, o Robô VR precisará então dirigir para a meta verde e executar as mesmas ações que foram usadas para mover o disco azul e vermelho, para mover o primeiro disco verde.
- Para repetir comportamentos várias vezes, pode ser utilizado um ciclo para.
-
Adicione um ciclo for ao topo do projeto, acima do primeiro comentário, e defina o parâmetro da função intervalo para '3'. Certifique-se de que o ciclo for está indentado na definição principal.
def main(): for repeat_count in range(3): wait(5, MSEC)
-
Para copiar o código para o loop for, será necessário prestar muita atenção ao recuo. Primeiro, adicione espaço antes do comando wait , para que o ciclo fique assim:
def main(): for repeat_count in range(3): wait(5, MSEC)
- De seguida, seleccione os comandos a colocar no ciclo for e copie e cole-os por cima do comando wait . Observe que o recuo estará incorreto após simplesmente copiar e colar. A linha indicadora cinzenta do ciclo for está quebrada e desligada do comando wait . Esta é uma sugestão visual de que o seu projeto não será executado como pretendido.
-
Selecione os comandos dentro do ciclo for e utilize o 'Tab' para recuar corretamente os comandos dentro do ciclo. Quando corretamente recuada, a linha indicadora cinzenta deve ligar o ciclo for com o comando wait para mostrar os limites do ciclo externo. Quando concluído, o seu projeto deve ter a seguinte aparência:
def main(): for repeat_count in range(3): # 1. Dirija para o disco usando o Down Eye Sensor enquanto não estiver down_eye.near_object ( ): drivetrain.drive (FORWARD) wait(5, MSEC ) drivetrain.stop() # 2. Pegue o disco magnet.energize(BOOST) # 3. Dirija para a meta usando o sensor de distância drivetrain.turn_to_heading (180, GRAUS) enquanto front_distance.get_distance (MM) > 200 :drivetrain.drive (FORWARD) wait(5, MSEC) drivetrain. stop() # 4. Drop disk in goal magnet.energize(DROP) drivetrain.drive_for(REVERSE, 100, MM) # 5. Vire e dirija para a próxima meta drivetrain.turn_to_heading(90, GRAUS) drivetrain.drive_for(PARA FRENTE, 800, MM) # 6. Gire para discos drivetrain.turn_to_heading(0, GRAUS) aguarde(5, MS)
- Assista ao vídeo abaixo para ver como mover os comandos e ajustar a indentação conforme descrito acima. No videoclipe, as seis seções de comentários do projeto são destacadas e o Menu de Contexto é aberto. A opção ‘Cut’ é selecionada e, em seguida, o cursor é colocado abaixo do comando for loop. O Menu de Contexto é aberto novamente e a opção "Colar" é selecionada. Os comandos estão então dentro do ciclo for , mas mal recuados. As seis seções de comentários são destacadas novamente e ‘Tab’ no teclado é pressionado para recuar corretamente o projeto dentro do loop.
- Abra o Disk Mover Playground, se ainda não estiver aberto, e execute o projeto.
-
Quando este projeto é executado, o Robô VR pega e solta um disco de cada cor no seu objetivo colorido correspondente.
Para sua informação
Observe que o robô VR continuou a bater na parede. Este comportamento é esperado, uma vez que o projeto instruiu o Robô VR a virar à direita e dirigir em direção ao próximo objetivo, três vezes. A primeira vez é de azul para vermelho. A segunda é do vermelho para o verde, e a terceira é do verde para a parede, já que não há outra meta colorida. Interrompa o projeto assim que o robô de RV bater na parede. O projeto poderia ser melhorado para que o Robô VR pare depois de pegar e mover o disco verde, mas isso aumentaria a complexidade geral do projeto.
Perguntas
Selecione uma ligação abaixo para aceder ao questionário da aula.
Google Doc / .docx / .pdf