Skip to main content

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".

Il Wall Maze Playground non mostra il cruscotto del parco giochi. Il robot VR ha una parete di fronte che sta toccando, indicando che dovrà girare per poter progredire nel labirinto.

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.

VEXcode VR Python Toolbox. Il comando while è evidenziato in rosso, con una freccia che punta all'interfaccia di codifica. Il codice legge def main():, while condition:, wait(5, MSEC) dopo che il comando while è stato trascinato dalla cassetta degli attrezzi all'interfaccia di codifica.

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.

Sul lato sinistro c'è un esempio di codice che legge mentre il sole splende:, gioca all'aperto. Dopo la dichiarazione while si legge entra dentro. Sulla destra c'è una ragazza in sella a una bicicletta fuori da casa sua in una giornata di sole. Secondo il codice, giocherà fuori fino a quando il sole non sarà più splendente, e poi entrerà.

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.

A sinistra mostra un codice di esempio, leggendo mentre non splende il sole:, entra. Dopo il comando while viene riprodotto all'esterno. A destra mostra una casa durante la notte dove c'è la luna. Secondo questo codice, mentre il sole non splende, nessuno giocherà all'aperto e rimarrà in casa.

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.Un diagramma di flusso del progetto che descrive il flusso di un progetto con una struttura while not. A sinistra il progetto nella definizione principale si legge mentre non è premuto il paraurti sinistro, con un drive in avanti, e attendere 5 millisecondi di comando all'interno del loop. All'esterno del loop è presente un comando di stop. A destra il flusso di progetto illustrato con una freccia rossa ciclica legge che mentre il paraurti non è premuto, quella condizione ritorna falsa e il robot avanza. Successivamente, una freccia verde dritta punta verso il basso illustrando che quando si preme il paraurti, la condizione ritorna vera e il progetto si interrompe facendo sì che il robot smetta di guidare.

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. La tessera di selezione Wall Maze Playground legge Wall Maze nella parte inferiore e mostra il labirinto in alto.
  • Denominare il progetto Unit4Lesson2.La barra degli strumenti di VEXcode VR. Il nome del progetto al centro della barra degli strumenti legge Unità 4 Lezione 2 ed è evidenziato con un riquadro rosso.

     

  • 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.