Skip to main content

Lição 4: Comportamentos repetidos

Na lição anterior, observaste como utilizar instruções if para que o robô VR verifique as condições. No entanto, devido ao fluxo do projeto, as condições dentro das instruções if são verificadas apenas uma vez. Nesta Lição, você será apresentado a um loop infinito e como ele pode ser usado para resolver o Desafio do Labirinto de Disco.

O mesmo fluxo de projeto da página anterior com as quatro instruções if e setas indicando as condições que cada instrução if está verificando e que a única instrução que relata como True é o olho frontal detectando nenhuma cor, o que significa que o robô avançará.

Resultados de Aprendizagem

  • Identifique que um ciclo infinito while repete os comportamentos dentro do ciclo para sempre.
  • Descreva por que razão um ciclo infinito while seria utilizado num projeto.
  • Descreva o fluxo do projeto num projeto que possui várias instruções if dentro de um ciclo infinito while .
  • Explique por que razão as instruções if são utilizadas com ciclos infinitos while .

Verificando repetidamente as condições

Como foi referido na lição anterior, a instrução if verifica uma condição apenas uma vez. Para que as condições contidas nas instruções if sejam verificadas repetidamente, o projeto necessita de voltar ao início repetidamente. Para tal, é necessário um ciclo infinito while .

while True:
	espera (5, MS)

Um ciclo infinito while utiliza uma condição que é sempre avaliada como True. Enquanto ciclos executam o corpo do ciclo quando a condição é True, então os comandos dentro do ciclo repetem-se infinitamente.

O ciclo infinito while e o problema do labirinto de discos

Para fazer com que o Robô VR se comporte como pretendemos e navegue com sucesso no Labirinto de Disco, as condições definidas pelas instruções if devem ser verificadas repetidamente enquanto o Robô VR conduz pelo Playground. A adição de um ciclo infinito while a todo o projeto permitirá que isto aconteça porque todas as instruções if contidas no ciclo infinito while no projeto abaixo são verificadas repetidamente até que o projeto seja interrompido.

Observe a indentação aqui. Todas as instruções if são indentadas para estarem dentro do ciclo infinito while. O fim do ciclo infinito while é anotado pelo comando wait.

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)

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 não ser detetada qualquer cor 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 infinito while é sempre True e, por isso, o código dentro do ciclo infinito while será sempre executado. Isto verificará continuamente as condições das instruções if enquanto o projeto estiver a ser executado. 
    • Recorde-se que o 'interior' de um ciclo while é indicado por recuo.
  • Durante o fluxo do projeto, se a condição da instrução if for True, serão executados os comandos dentro da instrução if. Se a condição da instrução if for False, 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 ciclos infinitos while para garantir que as condições são constantemente verificadas, essencialmente combinando o fluxo do design das instruções if dentro do ciclo.

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