Lezione 2: Utilizzo di un ciclo While
In questa lezione creerai un progetto utilizzando il sensore Bumper e il ciclo while . Nella mini-sfida, applicherai queste abilità per navigare dall'inizio del Labirinto del Muro alla lettera "A".

Risultati di apprendimento
- Identificare che i comandi non in attesa facciano continuare il progetto anche se il comportamento del comando non è ancora completo.
- Identifica che un comando di attesa completa il comportamento prima di continuare il progetto.
- Si noti che il ciclo while verificherà ripetutamente una condizione booleana e non passerà al comando successivo finché la condizione non riporterà True.
- Identificare che il ciclo while viene utilizzato con comandi non di attesa (ad esempio drive) per verificare le condizioni del sensore.
- Si noti che la parola chiave not inverte il valore di una condizione booleana da Vero a Falso o da Falso a Vero.
- Identificare che i comandi left_bumper.pressed e right_bumper.pressed restituiscono un valore Vero o Falso in un ciclo while .
- Descrivere come creare un progetto con un robot VR che avanza fino a quando non viene premuto il sensore paraurti.
Mentre i cicli
Il ciclo while accetta condizioni booleane. I cicli While verificano ripetutamente una condizione booleana e controllano il flusso del progetto. Il ciclo while continuerà finché la condizione sarà& True. Il ciclo while uscirà dal ciclo e passerà al comando successivo all'esterno del ciclo una volta che la condizione viene segnalata come False.

In sostanza, un ciclo while dice al robot VR di continuare a eseguire un comportamento finché una determinata condizione . La logica è simile a questo scenario: mentre il sole splende, vai a giocare fuori. Cosa faresti? La condizione di "il sole splende" determina dove dovresti essere. Quando splende il sole, la condizione è Vera, quindi vai a giocare fuori. Quando il sole tramonta, quella condizione è Falsa, quindi torneresti dentro.

Mentre i loop e il problema del labirinto del muro
La stessa logica si applica al robot VR nel labirinto a parete. Mentre il sensore paraurti non è premuto, il robot VR deve continuare ad avanzare. Quando viene premuto, dovrebbe fermarsi o girare. Utilizzando i cicli while insieme a comandi non di attesa, come drive, possiamo programmare il robot VR per fare proprio questo. Tuttavia, i comandi del sensore paraurti utilizzano la condizione del sensore paraurti premuto( left_bumper.pressed o right_bumper.pressed) Per codificare il robot VR per guidare mentre il sensore paraurti non è premuto, è necessario utilizzare un operatore NOT.
def main():
while not condition:
wait (5, MSEC)Per tua informazione
I comandi di non attesa e attesa determinano quando il comando successivo inizia un comportamento. I comandi in attesa, come drive_for e turn_for, completano i loro comportamenti prima di passare al comando successivo nel progetto. I comandi non in attesa, come drive e turn, continuano a passare al comando successivo nel progetto anche se il comportamento del comando non in attesa non è completo.
Comandi in attesa
drivetrain.drive_for(AVANTI, 200, MM)
drivetrain.turn_for(DESTRA, 90, GRADI)Comandi non in attesa
drivetrain.drive(AVANTI)
drivetrain.turn(DESTRA)La parola chiave Not
La parola chiave not verrà in genere utilizzata con i cicli while , per far sì che i comandi all'interno del ciclo vengano eseguiti mentre la condizione restituisce False. Per usare l'esempio "il sole splende", lo stesso effetto può essere ottenuto utilizzando l'operatore e non . Mentre il sole non splende, entra.

Nel Wall Maze, questo è utile per poter codificare il robot VR in modo che, mentre il sensore paraurti non è premuto, guiderà in avanti. La condizione è ancora "se il sensore paraurti è premuto", ma in questo modo, quando segnala False (non premuto), il flusso del progetto rimane nel loop. Quando si preme il sensore paraurti, la condizione è quindi True, quindi il progetto uscirà dal ciclo.
Per tua informazione
La parola chiave not è un operatore logico che inverte il valore di un valore booleano. Mettere la parola chiave non davanti a un comando che restituisce un valore booleano invertirà True in False e False in True. Ad esempio, immagina che il sensore paraurti sinistro sul robot VR sia premuto e il comando left_bumper.pressed restituisca True. La parola chiave not invertirà il valore booleano e farà sì che questa espressione restituisca False.
not left_bumper.pressed()A seconda dei dati del sensore utilizzati, potrebbe essere necessaria la parola chiave e non per far sì che un robot VR esegua i comportamenti desiderati.
def main():
while not left_bumper.pressed():
drivetrain.drive(FORWARD)
wait(5, MSEC)
drivetrain.stop()Costruire un progetto con un while loop e il sensore paraurti
Nomina e salva il progetto
- Aprire un nuovo progetto di testo e selezionare il Wall Maze Playground quando richiesto.

-
Denominare il progetto Unit4Lesson2.

-
Trascinare o digitare il comando while nell'area di lavoro per sostituire il comando Trasmissione che viene automaticamente compilato come parte di un nuovo progetto di testo. Si noti che all'interno del ciclo sono presenti i comandi a wait. Non rimuovere il comando wait , ciò garantirà che il robot VR esegua correttamente il progetto. Il tuo progetto dovrebbe essere simile a questo:
def main(): while condizione: wait(5, MSEC) -
Digitare un operatore e non dopo 'while' nel comando while . Il tuo progetto dovrebbe assomigliare a questo:
def main(): while not condition: wait(5, MSEC) -
Trascinare o digitare il comando left_bumper.pressed nella "condizione" del ciclo while. I comandi all'interno del loop verranno eseguiti mentre la condizione non è True, ovvero quando il sensore paraurti sinistro non viene premuto. Il tuo progetto dovrebbe assomigliare a questo:
def main(): while not left_bumper.pressed(): wait(5, MSEC) -
All'interno del ciclo while , trascinare o digitare il comando drive. Assicurarsi che i comandi drive e wait siano correttamente rientrati nel ciclo while , in modo che il ciclo venga eseguito come previsto. È possibile utilizzare le linee guida come ausilio visivo. Il tuo progetto dovrebbe assomigliare a questo:
def main(): while not left_bumper.pressed(): drivetrain.drive(FORWARD) wait(5, MSEC) -
Trascinare o digitare un comando stop all'esterno del ciclo while Assicurarsi che il comando stop sia allineato con il ciclo while e non sia rientrato, in modo che venga eseguito all'esterno del ciclo come previsto. È possibile utilizzare le linee guida come ausilio visivo. Il tuo progetto dovrebbe assomigliare a questo:
def main(): while not left_bumper.pressed(): drivetrain.drive(FORWARD) wait(5, MSEC) drivetrain.stop() - Aprire la finestra del parco giochi se non è già aperta. Assicurati che il parco giochi del labirinto a muro si apra.
- Eseguire il progetto.
- Guarda il robot VR guidare dall'inizio del labirinto a parete e fermati quando il sensore paraurti viene premuto dalla parete.
- Il comando Drive consente al robot VR di continuare a guidare in avanti durante la verifica delle condizioni del sensore paraurti con il comando Left Bumper Pressed. Una volta che il comando left_bumper.pressed viene segnalato come True, il robot VR passerà al comando successivo al di fuori del loop e smetterà di guidare.
Selezionare il pulsante Avanti per continuare con il resto della lezione.