Skip to main content

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. Tre frammenti di codice che dimostrano istruzioni condizionali in Python, ciascuno con un'istruzione if con una condizione seguita dalla parola chiave pass. I primi due frammenti hanno segni di spunta verdi sopra di essi, che indicano il corretto utilizzo. Il primo snippet include solo un'istruzione if, mentre il secondo include sia un'istruzione if che else con la parola chiave pass in ciascuna. Il terzo frammento, contrassegnato con una croce rossa, consiste solo in un'istruzione else con pass, che indica un uso errato, poiché un'istruzione else dovrebbe seguire un'istruzione if.

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 vista dall'alto verso il basso del Dynamic Castle Crasher Playground mostra che solo alcuni dei castelli sono stati rovesciati. Il robot VR si trova in alto a destra del parco giochi dopo il suo movimento.
  • 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. Una vista dall'alto verso il basso del Dynamic Castle Crasher con l'interfaccia del parco giochi. Il pulsante di reset in basso a sinistra dell'interfaccia del parco giochi è evidenziato con un riquadro rosso.
  • 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.Una vista angolata del parco giochi Dynamic Castle Crasher che mostra il robot VR che spinge un pezzo di un castello oltre la linea di confine rossa e fuori dal bordo del parco giochi.
  • 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.A sinistra c'è lo snippet di codice corrente del progetto. Sulla destra si trova la vista dall'alto verso il basso del parco giochi Dynamic Castle Crasher con l'interfaccia del parco giochi visibile. La misurazione del sensore di distanza sull'interfaccia del parco giochi legge 568 mm ed è evidenziata con un riquadro rosso. Questo dimostra che il castello al centro del parco giochi si trova a 568 millimetri dal robot VR.

  • 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.A sinistra c'è lo snippet di codice corrente del progetto. Sulla destra si trova la vista dall'alto verso il basso del parco giochi Dynamic Castle Crasher con l'interfaccia del parco giochi visibile. La misurazione del sensore di distanza sull'interfaccia del parco giochi legge 1354 mm ed è evidenziata con un riquadro rosso. Questo dimostra che il castello in cima al parco giochi si trova a 1354 millimetri dal robot VR.

  • 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.This is the project's code snippet surrounded by an orange arrow that begins and ends on the while True: statement at the top of the code snippet. There is a note on the arrow that says Loops continuously, showing that anything nested in the while True loop will repeat forever.

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

Il codice del progetto Python con frecce che puntano alle istruzioni if e else. La parte superiore delle frecce legge Controlla la condizione del sensore di distanza per mostrare la distanza. L'istruzioneound_object se controlla la condizione. Se l'oggetto viene rilevato, verrà eseguito il comando sotto l'istruzione if, ma se non viene rilevato alcun oggetto, verrà eseguito il comando sotto l'istruzione else.

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

Il codice del progetto dall'Unità 7 con una grande freccia arancione che circonda l'intero codice, che inizia e termina con l'istruzione while True. Una nota sulla freccia arancione recita Se le affermazioni contenute nell'infinito mentre il ciclo viene controllato ripetutamente. Le frecce verdi all'interno dell'istruzione while True mostrano il flusso del progetto, a partire dalle affermazioni individuali se si vede un certo colore e il comportamento che dovrebbe essere fatto di conseguenza, sia che si tratti di fare un comportamento o passare alla successiva istruzione if fino alla fine dove tutto torna ancora una volta.

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. Un diagramma che mostra un'intersezione a forma di T grigia con tre frecce direzionali: una che punta a sinistra, una che punta verso l'alto e una che punta a destra. Al centro dell'intersezione c'è un robot VR. A destra del diagramma ci sono due affermazioni condizionali in formato codice: se vai a scuola: gira a sinistra e se vai al negozio: gira a destra. Le istruzioni if sono scritte in testo nero e blu, con if in blu e le istruzioni direzionali in blu.

 

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.A diagram showing a gray Y-shaped intersection with two directional paths - one leading left and one leading right. In the center of the intersection is the VR Robot. Above the diagram is code showing conditional statements in code format: if going to school: Turn left and else: Turn right. The if and else statements are written in black and blue text, with if and else in blue and the directional instructions in lighter blue.  

Domande

Seleziona un link qui sotto per accedere al quiz della lezione.

Google Doc / .docx / .pdf