Skip to main content

Lição 4: Usando Loops Aninhados

Na lição anterior, você criou um projeto para instruir o robô de RV a dirigir, pegar e mover todos os três discos azuis no Disk Mover Playground para a meta azul. Nesta lição, você criará um projeto para pegar e mover um disco de cada cor para a meta colorida correspondente no playground do Disk Mover usando loops aninhados!

Uma vista de cima para baixo do Disk Mover Playground com o primeiro disco de cada cor na meta de cor correspondente. O robô VR está voltado para a parede lateral direita na borda da baliza verde, no canto inferior direito.

Resultados de Aprendizagem

  • Identifique como aninhar loops.
  • Descrever o fluxo de um projeto através de loops aninhados.
  • Explique por que os loops aninhados seriam usados num projeto.

O que são Loops Aninhados?

Nas Unidades e Lições anteriores deste curso, você usou loops da categoria Control, como for loop, while loop e infinite while loops para repetir comportamentos. Colocar um loop dentro de outro loop é chamado de 'aninhamento'. Os loops aninhados são úteis em projetos em que um Robô de RV repete os mesmos comportamentos mais de uma vez, como mover vários discos no Playground. Os loops de aninhamento podem organizar e condensar um projeto, para torná-lo mais facilmente compreendido. Isso pode ser útil para entender melhor o contexto e a finalidade do código, além de facilitar a identificação de erros e a solução de problemas de um projeto. 

Por exemplo, para mover todos os três discos azuis para a meta azul, pode ser utilizado um loop para para repetir o processo de recolha de um disco várias vezes. O projeto aqui mostrado coloca o projeto da Lição 3 para mover o primeiro disco azul para a meta azul dentro de um loop for , com o parâmetro definido como 3. Note como as quatro secções do projeto anterior estão recuadas no ciclo for.

def main():
    for repeat_count in range(3):
        #1. Dirija para o primeiro disco
        enquanto não estiverdown_eye.near_object ()
            :drivetrain.drive (FORWARD)
            wait(5, MSEC)
        drivetrain.stop()

        # 2. Pegue o disco magnet.energize
        (BOOST)

        # 3. Dirija para a meta
        drivetrain.turn_to_heading(180, GRAUS)
        enquanto front_distance.get_distance(MM) > 200:
            drivetrain.drive(FORWARD)
            wait(5, MSEC)
        drivetrain.stop()

        # 4. Solte o disco na meta magnet.energize
        (DROP) drivetrain.drive_for

        (REVERSE, 100, MM)
        drivetrain.turn_to_heading(0, DEGREES)

    wait(5, MSEC)

Quando ‘aninha’ ciclos, o ciclo externo controla o número de vezes que o ciclo interno é executado.  Neste projeto, o ciclo para é o ciclo externo e irá repetir os comportamentos no ciclo três vezes.

O projeto de cima com o loop for destacado numa caixa vermelha. Indentado abaixo da definição principal, os dois pontos para contagem de sublinhado de repetição no intervalo (3) são o início do loop, e as quatro seções do projeto são indentadas abaixo disso. Alinhado com o comando for loop na parte inferior do projeto está um comando wait, mostrando onde o loop termina.

Os loops internos são aqueles loops contidos dentro do loop externo. Neste exemplo, cada um dos ciclos while (para conduzir para o disco e para o objetivo) são ‘loops internos’ que são executados cada vez que o projeto passa pelo ciclo for .O mesmo projeto de cima, com cada um dos loops while internos destacados em uma caixa vermelha. A primeira e a terceira seções de comentários do projeto contêm loops while para usar os sensores no robô para conduzir até que um disco seja detectado e, em seguida, até que a parede seja detectada.

Para sua informação

A indentação é importante em projetos VEXcode VR Python. Você pode usar as linhas indicadoras cinza no espaço de trabalho como uma ajuda visual ao aninhar loops, para garantir que o seu projeto funcione como pretendido. Cada linha indica o início e o fim de um ciclo.

O mesmo projeto de cima com as linhas guia destacadas em caixas vermelhas, mostrando o alinhamento de indentação de cada uma das alças internas em relação ao restante do projeto. A linha for loop se estende diretamente para o comando final wait. E cada uma das linhas de loop while se estende até os comandos stop.

Fluxo de um projeto de loop aninhado 

Neste exemplo, cada vez que o loop for itera, um disco azul é apanhado e regressa ao objetivo azul. 

Após a primeira iteração, o primeiro disco azul é retornado à meta azul e o Robô VR é girado para estar pronto para coletar o segundo disco.

Uma imagem lado a lado do projeto de cima mostrada no espaço de trabalho à esquerda e a janela do playground mostrada à direita. O projeto tem uma seta laranja a partir do comando for loop em torno de todo o projeto, ilustrando a primeira iteração do loop for. No Playground, o primeiro disco azul está na baliza azul, e o Robô VR está posicionado voltado para os discos azuis restantes, na extremidade frontal da baliza, indicando a posição do robô após a primeira iteração.

Após a segunda iteração, o segundo disco azul é coletado e o Robô VR é girado para estar pronto para coletar o terceiro disco.

Uma imagem lado a lado do projeto de cima mostrada no espaço de trabalho à esquerda e a janela do playground mostrada à direita. O projeto tem uma seta laranja a partir do comando for loop em torno de todo o projeto, ilustrando a segunda iteração do loop for. No Playground, 2 discos azuis estão na baliza azul, e o Robô VR está posicionado voltado para o disco azul restante, na extremidade frontal da baliza, indicando a posição do robô após a segunda iteração.

Após a terceira iteração, o terceiro disco azul é coletado e o Robô VR para de se mover. O loop para já completou o seu alcance, pelo que o projeto está concluído. 

Uma imagem lado a lado do projeto de cima mostrada no espaço de trabalho à esquerda e a janela do playground mostrada à direita. O projeto tem uma seta laranja a partir do comando for loop em torno de todo o projeto, ilustrando a terceira iteração do loop for. No Playground, todos os três discos azuis estão na baliza azul, e o Robô VR está posicionado virado para longe da baliza do lado de fora da caixa de baliza, indicando a posição do robô após a iteração final.

 

Selecione o botão Seguinte para continuar com o resto desta lição.