Skip to main content

Lição 4: Usando loops enquanto infinitos

Resolver o problema do labirinto de discos

Construção do projecto

  • Carregue o projeto Unit7Lesson3 da lição anterior ou recrie o projeto mostrado aqui para começar.
def main():
	# Se o olho frontal detectar verde, vire à direita
    se front_eye.detect (VERDE):
        drivetrain.turn_for (DIREITA, 90, GRAUS)

    # Se o olho frontal detectar azul, vire à esquerda
    se front_eye.detect (AZUL):
        drivetrain.turn_for (ESQUERDA, 90, GRAUS)

    # Se o olho frontal detectar vermelho, pare
    se front_eye.detect (VERMELHO): drivetrain.stop ( 
        )

    # Se o olho frontal não detectar nenhum, dirija para frente
    se front_eye.detect (NENHUM): drivetrain.drive 
        (PARA FRENTE)
  • Renomeie o projeto Unit7Lesson4.Barra de ferramentas VEXcode VR com a caixa de nome do projeto chamada. O projeto chama-se Unidade 7 Lição 4.

     

  • Arraste ou digite um while loop infinito no topo do projeto e defina a condição como True.
def main():
    while True:
    	wait(5, MS)
  • Mova o comando wait para abrir espaço para os comandos que irão dentro do ciclo infinito while .
def main():
    while True:
    
    
    	wait(5, MS)
  • Dentro do ciclo infinito while , copie e cole as instruções if anteriores dentro do ciclo. Não apague o comando wait na parte inferior do ciclo while. O seu projeto pode ser assim. Observe que copiar e colar comandos dessa maneira não resulta em recuo correto.
def main():
    while True:
        
    # Se o olho frontal detectar verde, vire à direita
    se front_eye.detect (VERDE):
        drivetrain.turn_for (DIREITA, 90, GRAUS)

    # Se o olho frontal detectar azul, vire à esquerda
    se front_eye.detect (AZUL):
        drivetrain.turn_for (ESQUERDA, 90, GRAUS)

    # Se o olho frontal detectar vermelho, pare
    se front_eye.detect (VERMELHO): drivetrain.stop 
        ()

    # Se o olho frontal não detectar nenhum, dirija para frente
    se front_eye.detect (NENHUM): 
        drivetrain.drive (PARA FRENTE)

    aguarde(5, MSEC)
  • Lembre-se, a indentação é MUITO importante no VEXcode VR Python. Para que o fluxo do projeto seja executado como planeado, as instruções if necessitam de ser indentadas dentro do ciclo infinito while . Selecione as instruções if e prima 'Tab' para as recuar dentro do ciclo infinito while . Quando devidamente recuado, o seu projeto deve ter a seguinte aparência: 
def main():
    while True:
        
        # Se o olho frontal detectar verde, vire à direita
        se front_eye.detect (VERDE):
            drivetrain.turn_for (DIREITA, 90, GRAUS)

        # Se o olho frontal detectar azul, vire à esquerda
        se front_eye.detect (AZUL):
            drivetrain.turn_for (ESQUERDA, 90, GRAUS)

        # Se o olho frontal detectar vermelho, pare
        se front_eye.detect (VERMELHO): drivetrain.stop 
            ()

        # Se o olho frontal não detectar nenhum, dirija para frente
        se front_eye.detect (NENHUM): 
            drivetrain.drive (PARA FRENTE)

        aguarde(5, MSEC)
  • Com o ciclo infinito while adicionado ao projeto, todas as instruções if terão as suas condições verificadas repetidamente. Abra o Disk Maze Playground e execute o projeto.
  • Quando este projeto for executado, o robô VR navegará pelo Disk Maze Playground do início ao fim. Assim que o Robô VR detetar vermelho, irá parar de conduzir.

    O robô VR no Disk Maze Playground com o robô VR parou em frente ao disco vermelho perto do canto inferior direito do playground.

Em resumo

  • No projeto da Lição anterior, as condições dentro das instruções if foram verificadas apenas uma vez. Como as condições nas instruções if foram verificadas apenas uma vez, o VR Robot avançou para sempre porque a condição de 'sem cor' detetada foi reportada como True no início do projeto.
  • Agora que o ciclo infinito while foi adicionado, cada condição das instruções if será verificada repetidamente. A condição do ciclo while é sempre True e, por isso, o código dentro do ciclo while será sempre executado. Isto verificará repetidamente as condições das instruções if enquanto o projeto estiver a ser executado. 
  • Durante o fluxo do projeto, se a condição das instruções if for True, serão executados os comandos dentro da instrução if . Se a condição da instrução if for Falsa, os comandos dentro da instrução if não serão executados e o fluxo do projeto continuará para o comando seguinte. Isso permite que o robô VR execute comportamentos discretos, como girar ou parar, uma vez que detecta uma determinada cor.
  • If instruções são utilizadas com infinito while ciclos para garantir que as condições são constantemente verificadas.

Perguntas

Selecione uma ligação abaixo para aceder ao questionário da aula.

Google Doc / .docx / .pdf