Lição 2: Usando um Loop While
Nesta lição, irá criar um projeto utilizando o Sensor Bumper e o ciclo while . No mini-desafio, você aplicará essas habilidades para navegar desde o início do Labirinto da Parede até a letra ‘A‘.

Resultados de Aprendizagem
- Identifique que os comandos que não estão em espera fazem com que o projeto continue, mesmo que o comportamento do comando ainda não esteja concluído.
- Identifique que um comando de espera conclui o comportamento antes de continuar com o projeto.
- Identifique que o ciclo while verificará repetidamente uma condição booleana e não passará para o comando seguinte até que a condição informe True.
- Identifique que o ciclo while é utilizado com comandos sem espera (por exemplo, drive) para verificar o estado do sensor.
- Identifique que a palavra-chave not inverte o valor de uma condição booleana de Verdadeiro para Falso ou de Falso para Verdadeiro.
- Identifique que os comandos left_bumper.pressed e right_bumper.pressed devolvem um valor True ou False num ciclo while .
- Descreva como criar um projeto que tenha uma unidade de robô VR para a frente até que o sensor de pára-choques seja pressionado.
Loops While
O ciclo while aceita condições booleanas. Enquanto loops verificam repetidamente uma condição booleana e controlam o fluxo do projeto. O ciclo while continuará em ciclo enquanto a condição for& True. O ciclo while sairá do ciclo e passará para o próximo comando fora do ciclo assim que a condição for reportada como False.

Essencialmente, um ciclo while diz ao VR Robot para continuar a executar um comportamento enquanto uma determinada condição está a ser satisfeita. A lógica é semelhante a este cenário: enquanto o sol está brilhando, vá brincar lá fora. O que faria? A condição de "o sol está brilhando" determina onde você deve estar. Quando o sol está brilhando, a condição é Verdadeira, então você vai brincar lá fora. Quando o sol se põe, essa condição é falsa, então você voltaria para dentro.

Loops While e o Problema do Labirinto da Parede
A mesma lógica se aplica ao Robô de RV no Labirinto da Parede. Enquanto o sensor de pára-choques não estiver pressionado, o robô VR deve continuar avançando. Quando é pressionado, deve parar ou girar. Usando enquanto faz loops em conjunto com comandos sem espera, como drive, podemos codificar o VR Robot para fazer exatamente isso. No entanto, os comandos do Sensor de Pára-choques utilizam a condição do Sensor de Pára-choques ser pressionado (left_bumper.pressed ou right_bumper.pressed) Para codificar o Robô VR para conduzir enquanto o Sensor de Pára-choques estiver not pressionado, precisamos usar um operador not .
def main():
while not condition:
wait (5, MS)Para sua informação
Comandos de não espera e espera determinam quando o próximo comando inicia um comportamento. Comandos de espera, como drive_for e turn_for, concluem seus comportamentos antes de passar para o próximo comando no projeto. Comandos sem espera, como drive e turn, continuam a se mover para o próximo comando no projeto, mesmo que o comportamento do comando sem espera não esteja completo.
Comandos de espera
drivetrain.drive_for(PARA FRENTE, 200, MM)
drivetrain.turn_for(DIREITA, 90, GRAUS)Comandos de Não Espera
drivetrain.drive(PARA FRENTE)
drivetrain.turn(DIREITA)A palavra-chave Not
A palavra-chave not será normalmente utilizada com ciclos while , para fazer com que os comandos dentro do ciclo sejam executados enquanto a condição retorna False. Para utilizar o exemplo do 'sol está a brilhar', o mesmo efeito pode ser conseguido utilizando um operador e não . Enquanto o sol não estiver brilhando, entre.

No Labirinto de Parede, isso é útil para que possamos codificar o Robô VR para que, enquanto o Sensor de Para-choque não for pressionado, ele avance. A condição ainda é 'se o sensor de pára-choques for pressionado', mas desta forma, quando ele relata Falso (não pressionado), o fluxo de projeto permanece no loop. Quando o sensor de pára-choques é pressionado, a condição é então True, então o projeto sairá do loop.
Para sua informação
A palavra-chave not é um operador lógico que inverte o valor de um booleano. Colocar a palavra-chave não na frente de um comando que retorna um valor booleano inverterá Verdadeiro para Falso e Falso para Verdadeiro. Por exemplo, imagine que o Sensor do Para-choque Esquerdo no Robô VR é pressionado e o comando left_bumper.pressed retorna True. A palavra-chave not irá inverter o valor booleano e fazer com que esta expressão devolva False.
not left_bumper.pressed()Dependendo dos dados do sensor que está a utilizar, a palavra-chave not pode ser necessária para fazer com que um robô de RV execute os comportamentos desejados.
def main():
while not left_bumper.pressed():
drivetrain.drive(FORWARD)
wait(5, MSEC)
drivetrain.stop()Construir um Projecto com um Loop Enquanto e o Sensor Bumper
Nomeie e guarde o projeto
- Abra um novo projeto de texto e selecione o Wall Maze Playground quando solicitado.

-
Nomeie o projeto Unit4Lesson2.

-
Arraste ou digite o comando while na área de trabalho para substituir o comando Drivetrain que é preenchido automaticamente como parte de um novo projeto de texto. Note que existe um comando a wait dentro do ciclo. Não remova o comando wait , isto irá garantir que o VR Robot executa o projeto corretamente. O seu projeto deve ter este aspeto:
def main(): while condition: wait(5, MS) -
Introduza um operador e não após o 'while' no comando while . O seu projeto deve agora ter este aspeto:
def main(): while not condition: wait(5, MS) -
Arraste ou digite o comando left_bumper.pressed na 'condição' do loop while. Os comandos dentro do loop serão executados enquanto a condição não for True, ou seja, quando o Sensor do Para-choque Esquerdo não for pressionado. O seu projeto deve agora ter este aspeto:
def main(): while not left_bumper.pressed(): wait(5, MSEG) -
Dentro do ciclo while , arraste ou digite o comando drive. Certifique-se de que o comando drive e o comando wait estão corretamente indentados no ciclo while , para que o ciclo seja executado como planeado. Você pode usar as linhas de orientação como uma ajuda visual. O seu projeto deve agora ter este aspeto:
def main(): while not left_bumper.pressed(): drivetrain.drive(FORWARD) wait(5, MSEC) -
Arraste ou digite um comando stop fora do ciclo while . Certifique-se de que o comando stop está alinhado com o ciclo while e não recuado, de modo a que corra fora do ciclo como pretendido. Você pode usar as linhas de orientação como uma ajuda visual. O seu projeto deve agora ter este aspeto:
def main(): while not left_bumper.pressed(): drivetrain.drive(FORWARD) wait(5, MSEC) drivetrain.stop() - Abra a janela do playground se ainda não estiver aberta. Certifique-se de que o Wall Maze Playground abre.
- Executar o projeto.
- Observe o robô VR dirigir a partir do início do labirinto de parede e pare quando o sensor de pára-choques for pressionado pela parede.
- O comando Drive permite que o Robô VR continue avançando enquanto verifica a condição do Sensor do Para-choque com o comando Left Bumper Pressed (Para-choque Esquerdo Pressionado). Assim que o comando left_bumper.pressed for reportado como True, o robô VR passará para o próximo comando fora do loop e parará de dirigir.
Selecione o botão Seguinte para continuar com o resto desta lição.