Lezione 2: Costruire e testare il progetto
Continuare a costruire il progetto
-
Ora è necessario impostare la condizione dell'istruzione if else . Per utilizzare il sensore di distanza per rilevare i castelli, è possibile utilizzare il comando found_object . Aggiungere il comando found_object alla condizione. Il tuo progetto dovrebbe assomigliare a questo:
def main(): # Il sensore di distanza rileva un castello? if front_distance.found_object(): # Castello di schianto rilevato da un passaggio del sensore di distanza else: # Girare per trovare un castello utilizzando il passaggio del sensore di distanza -
Se il sensore di distanza trova un oggetto, il robot VR deve avanzare per far cadere il castello. Aggiungere un comando drive nel ramo 'if' dell'istruzione if else e impostare il parametro per far avanzare il robot VR. (Questo comando dovrebbe sostituire il 'pass').
def main(): # Il sensore di distanza rileva un castello? if front_distance.found_object(): # Crash castle detected by a Distance Sensor drivetrain.drive(FORWARD) else: # Turn to find a castle using the Distance Sensor pass -
Quando il comando found_object restituisce False, verrà eseguito il ramo 'else' , quindi il robot VR dovrà girarsi per trovare un castello nel parco giochi. Aggiungere un comando turn all'interno del ramo 'else' e impostare i parametri per girare il robot VR verso destra.
def main(): # Il sensore di distanza rileva un castello? if front_distance.found_object(): # Crash castle detected by a Distance Sensor drivetrain.drive(FORWARD) else: # Turn to find a castle using the Distance Sensor drivetrain.turn(RIGHT)
Per tua informazione
Il ramo "else" dell'istruzione if else funziona solo in un progetto come parte di un'istruzione if else. Sebbene sia possibile avere un'istruzione if autonoma, non esiste un'istruzione 'else' in VEXcode VR Python. Il ramo "else" viene eseguito quando la condizione del ramo "if" non è soddisfatta. Senza una condizione definita (il ramo "if"), il ramo "else" non funzionerebbe mai. 
Aggiungi un ciclo e testa il progetto
- Prima di testare il progetto, è necessario aggiungere un altro comando. Le istruzioni If else controlleranno la condizione solo una volta prima di passare al comando successivo esterno all'istruzione. Nell'Unità 7, è stato aggiunto al progetto un ciclo infinito while per istruire il robot VR a controllare ripetutamente le condizioni del sensore dell'occhio rivolto verso il basso. Per garantire che la condizione del sensore di distanza venga verificata ripetutamente , trascinare o digitare un ciclo infinito while , quindi copiare l'istruzione if else all'interno del ciclo infinito while. Il tuo progetto dovrebbe assomigliare a questo:
-
Ricordarsi di prestare attenzione all'indentazione quando si copiano e si incollano i comandi in un ciclo, in modo che il progetto funzioni come previsto quando viene eseguito.
def main(): while True: # Il sensore di distanza rileva un castello? if front_distance.found_object(): # Crash castle detected by a Distance Sensor drivetrain.drive(FORWARD) else: # Turn to find a castle using the Distance Sensor drivetrain.turn(RIGHT) wait(5, MSEC)
-
- Aprire la finestra del parco giochi se non è già aperta. Assicurati che il parco giochi Dynamic Castle Crasher si apra e gestisci il progetto.

- Una volta che il robot VR ha rovesciato almeno due castelli, ricarica il parco giochi ed esegui il progetto su un altro layout del parco giochi Dynamic Castle Crasher.

- Ad ogni esecuzione del progetto, il robot VR girerà fino a quando il sensore di distanza non rileverà un castello, quindi si dirigerà verso quell' edificio per rovesciarlo.

- Durante l'esecuzione del progetto, il robot VR può spingere un pezzo del castello fino al bordo e cadere dal parco giochi. Ciò accade perché il comando found_object segnala ancora la presenza di un oggetto di fronte al robot VR. Quando questo comando riporta True, il robot VR avanza, portando il robot VR a cadere dal parco giochi.
Flusso di progetto con istruzione If Else
L'istruzione if else viene utilizzata in modo che il robot VR possa prendere una decisione. Se la condizione booleana è True, verranno eseguiti i comandi all'interno del ramo "if". Se la condizione booleana è False, verranno eseguiti i comandi all'interno del ramo 'else'.
Ad esempio, in questa iterazione del Dynamic Castle Crasher Playground, quando il progetto viene avviato il sensore di distanza rileva un oggetto: la condizione del found_object comando segnala True. Ora verrà eseguito il ramo "if" del progetto e il robot VR andrà avanti. Il robot VR salterà il ramo "else" del progetto.
- Si noti che i dati del sensore di distanza sono riportati anche nel cruscotto. Quando viene rilevato un oggetto, verrà visualizzato il valore della distanza.
Tuttavia, in questa iterazione del Dynamic Castle Crasher Playground, quando il progetto viene avviato il sensore di distanza NON rileva un oggetto: la condizione del comando found_object riporta False. Ora il robot VR salterà il ramo "if" del progetto e verrà eseguito il ramo "else" del progetto, quindi il robot VR girerà a destra.
- Si noti che il valore del sensore di distanza nel cruscotto è riportato come > 3000 mm. Il sensore di distanza può rilevare oggetti all'interno di un intervallo di 3000 millimetri (mm), quindi quando un oggetto non viene rilevato, il valore viene riportato come maggiore di (>) 3000 mm.
Poiché l'istruzione if else si trova all'interno di un ciclo infinito while, il progetto torna all'inizio del ciclo infinitowhile per controllare ripetutamente la condizione dell'istruzioneif else. Questo ciclo continuerà per sempre, istruendo il robot VR a controllare continuamente la condizione if else centinaia di volte al secondo.
- Si noti che i comandi drive e turn all'interno dell'istruzione if else sono comandi non in attesa. I comandi non in attesa non interrompono il flusso di un progetto mentre sono in esecuzione. Un comportamento non in attesa eseguito in un'istruzione if else (ad esempio "avanza se viene rilevato un oggetto") continuerà mentre la condizione viene verificata e cambierà solo quando la condizione cambia.
Per tua informazione
Un'istruzione if else viene utilizzata per garantire che venga eseguito un solo ramo nel progetto quando viene verificata la condizione. Solo un'istanza o una condizione può essere vera in qualsiasi momento. Questo rende il progetto più efficiente.

Confronta il progetto corrente con il progetto creato nell'Unità 7. Il progetto dell'Unità 7 utilizza quattro istruzioni if

Quando si esegue un progetto con più istruzioni if , è possibile che più condizioni riportino Vero (o Falso) mentre il progetto esegue i comandi nel ciclo infinito while Conflitti come questo potrebbero causare l'interruzione dell'esecuzione del progetto o un'esecuzione più lenta.
In altre parole, usare più istruzioni se in un progetto equivale a percorrere una strada con più rampe di uscita. A seconda di dove stai cercando di andare, ti gireresti in posti diversi. Ad esempio, se andavi a scuola, giravi a sinistra; se andavi al negozio, giravi a destra. E se non andassi a scuola o al negozio? Entrambe le condizioni riporterebbero Falso e tu rimarresti sulla retta via. O se andassi sia a scuola che al negozio? Entrambe le condizioni riporterebbero True, ma non è possibile girare in due posizioni contemporaneamente. 
Per continuare con l'analogia, un'affermazione if else è come viaggiare verso un bivio: ti costringe a prendere una decisione. Se stai andando a scuola, gira a sinistra; altrimenti, gira a destra. Non importa dove stai andando, o giri a sinistra o a destra. Usare un'istruzione if else eviterebbe bug come quelli sopra, perché ti costringerebbe a prendere una decisione, poiché solo una condizione può essere vera in un dato momento.