Skip to main content

Lektion 2: Erstellen und Testen des Projekts

Fortsetzung des Projektaufbaus 

  • Nun muss die Bedingung der if else -Anweisung festgelegt werden. Um den Distanzsensor zum Erkennen von Burgen zu verwenden, kann der Befehl found_object verwendet werden. Fügen Sie der Bedingung den Befehl found_object hinzu. Ihr Projekt sollte nun so aussehen:

    def main():
    	# Erkennt der Abstandssensor eine Burg?
    	
    	wenn front_distance.found_object():
    		# Von einem Entfernungssensor erkannte Absturzburg
    		passiert
    		
    	sonst:
    		# Wende, um eine Burg mit dem Entfernungssensorpass zu
    		finden
  • Wenn der Abstandssensor ein Objekt findet, sollte der VR-Roboter vorwärts fahren, um die Burg umzustoßen. Fügen Sie einen  Antriebsbefehl in den Zweig "if" der if else-Anweisung ein und legen Sie den Parameter fest , um den VR-Roboter vorwärts zu fahren. (Dieser Befehl sollte das 'pass' ersetzen). 

    def main():
    	# Erkennt der Abstandssensor eine Burg?
    	
    	if front_distance.found_object():
    		# Durch einen Abstandssensor erkannte 		Absturzburg drive
    		(FORWARD)
    		
    	else:
    		# Mit dem Abstandssensorpass abbiegen, um eine Burg zu
    		finden
  • Wenn der Befehl found_object False“ meldet, wird der Zweig „else“ ausgeführt, sodass der VR-Roboter abbiegen muss, um ein Schloss auf dem Spielplatz zu finden. Fügen Sie einen Abbiegebefehl in den Zweig "Else" ein und stellen Sie die Parameter ein, um den VR-Roboter nach rechts zu drehen. 

    def main():
    	# Erkennt der Abstandssensor eine Burg?
    	
    	wenn front_distance.found_object():
    		# Aufprallschloss von einem Abstandssensor Antriebsstrang erkannt.antreiben 		(
    		VORWÄRTS)
    		
    	sonst:
    		# Drehen, um ein Schloss mit dem Abstandssensor Antriebsstrang 		zu
    		finden.drehen(RECHTS)

Zur Kenntnisnahme

Der Zweig 'else' der if else -Anweisung funktioniert in einem Projekt nur als Teil einer if else -Anweisung. Während Sie eine  if-Anweisung eigenständig haben können, gibt es in VEXcode VR Python keine "else" -Anweisung. Der Zweig 'else' wird ausgeführt, wenn die Bedingung des Zweigs 'if' nicht erfüllt ist. Ohne eine definierte Bedingung (den Zweig "if") würde der Zweig "else" niemals ausgeführt. Drei Codeausschnitte mit bedingten Anweisungen in Python, die jeweils eine if-Anweisung mit einer Bedingung gefolgt vom Schlüsselwort pass enthalten. Die ersten beiden Snippets sind mit grünen Häkchen versehen, die auf die korrekte Verwendung hinweisen. Das erste Snippet enthält nur eine if-Anweisung, während das zweite sowohl eine if- als auch eine else-Anweisung mit dem Schlüsselwort pass enthält. Das dritte Snippet, das mit einem roten Kreuz gekennzeichnet ist, besteht nur aus einer else-Anweisung mit Pass, die auf eine falsche Verwendung hinweist, da eine else-Anweisung auf eine if-Anweisung folgen sollte.

Fügen Sie eine Schleife hinzu und testen Sie das Projekt

  • Bevor das Projekt getestet wird, muss ein weiterer Befehl hinzugefügt werden. Andernfalls prüfen Anweisungen die Bedingung nur einmal, bevor sie zum nächsten Befehl außerhalb der Anweisung wechseln. In Einheit 7 wurde dem Projekt eine Endlosschleife hinzugefügt, um den VR-Roboter anzuweisen, den Zustand des Down Eye Sensors wiederholt zu überprüfen. Um sicherzustellen, dass die Bedingung des Abstandssensors wiederholt überprüft wird, ziehen Sie eine Endlosschleife ein oder geben Sie sie ein, und kopieren Sie dann die if else -Anweisung in die Endlosschleife. Ihr Projekt sollte nun so aussehen:
    • Denken Sie daran, beim Kopieren und Einfügen von Befehlen in eine Schleife auf Einrückungen zu achten, damit das Projekt bei der Ausführung wie beabsichtigt funktioniert. 

      def main():
      
      	while True:
      		# Erkennt der Abstandssensor eine Burg?
      	
      		wenn front_distance.found_object():
      			# Aufprallschloss von einem Abstandssensor Antriebsstrang erkannt.antreiben 			(
      			VORWÄRTS)
      		
      		sonst:
      			# Drehen, um ein Schloss mit dem Abstandssensor Antriebsstrang 			zu
      			finden.drehen(RECHTS)
      		
      		warten(5, MS)
  • Öffnen Sie das Playground-Fenster, wenn es noch nicht geöffnet ist. Stellen Sie sicher, dass sich der Dynamic Castle Crasher Playground öffnet, und führen Sie das Projekt aus. Eine Draufsicht auf den Dynamic Castle Crasher Playground zeigt, dass nur einige der Schlösser umgestürzt wurden. Der VR-Roboter befindet sich nach seiner Bewegung um den Spielplatz oben rechts auf dem Spielplatz.
  • Sobald der VR-Roboter mindestens zwei Schlösser umgeworfen hat, laden Sie den Spielplatz neu und führen Sie das Projekt auf einem anderen Layout des Dynamic Castle Crasher Playground aus. Eine Draufsicht auf den Dynamic Castle Crasher mit der Spielplatzoberfläche. Die Reset-Taste unten links in der Spielplatzoberfläche ist mit einem roten Kästchen hervorgehoben.
  • Bei jedem Durchlauf des Projekts dreht sich der VR-Roboter um, bis eine Burg vom Abstandssensor erkannt wird, und fährt dann auf dieses Gebäude zu, um es umzustoßen.Eine abgewinkelte Ansicht des Spielplatzes Dynamic Castle Crasher zeigt den VR-Roboter, der ein Stück einer Burg über die rote Grenze und vom Rand des Spielplatzes schiebt.
  • Während des Projektlaufs kann der VR-Roboter ein Burgstück bis an den Rand schieben und vom Spielplatz fallen. Dies liegt daran, dass der Befehl found_object immer noch meldet, dass sich ein Objekt vor dem VR-Roboter befindet. Wenn dieser Befehl True meldet, fährt der VR-Roboter vorwärts, was dazu führt, dass der VR-Roboter vom Spielplatz fällt.

Projektablauf mit If Else-Anweisung

Die if else -Anweisung wird verwendet, damit der VR-Roboter eine Entscheidung treffen kann. Wenn die boolesche Bedingung True ist, werden die Befehle innerhalb des Zweigs "if" ausgeführt. Wenn die boolesche Bedingung Falsch ist, werden die Befehle innerhalb des Zweigs 'else' ausgeführt.

Beispielsweise erkennt in dieser Iteration des Dynamic Castle Crasher Playground der Distanzsensor beim Starten des Projekts ein Objekt – die Bedingung des found_object Befehls „True“ (Wahr) Jetzt wird der „if“-Zweig des Projekts ausgeführt und der VR-Roboter fährt vorwärts. Der VR-Roboter überspringt den „else“-Zweig des Projekts.Auf der linken Seite befindet sich das aktuelle Code-Snippet des Projekts. Rechts ist die Draufsicht auf den Dynamic Castle Crasher Spielplatz mit der Spielplatzoberfläche sichtbar. Die Messung des Abstandssensors auf der Spielplatzoberfläche misst 568 mm und wird durch ein rotes Kästchen hervorgehoben. Dies zeigt, dass das Schloss in der Mitte des Spielplatzes 568 Millimeter vom VR-Roboter entfernt ist.

  • Beachten Sie, dass die Daten des Abstandssensors auch im Dashboard gemeldet werden. Wenn ein Objekt erkannt wird, wird der Abstandswert angezeigt.

Wenn das Projekt in dieser Iteration des Dynamic Castle Crasher Playground jedoch gestartet wird, erkennt der Distanzsensor KEIN Objekt – die Bedingung des Befehls found_object meldet „Falsch“. Jetzt überspringt der VR-Roboter den „if“ -Zweig des Projekts und der „else“ -Zweig des Projekts wird ausgeführt, sodass der VR-Roboter nach rechts abbiegt.Auf der linken Seite befindet sich das aktuelle Code-Snippet des Projekts. Rechts ist die Draufsicht auf den Dynamic Castle Crasher Spielplatz mit der Spielplatzoberfläche sichtbar. Die Messung des Abstandssensors auf der Spielplatzoberfläche zeigt 1354 mm an und ist mit einem roten Kästchen hervorgehoben. Dies zeigt, dass das Schloss an der Spitze des Spielplatzes 1354 Millimeter vom VR-Roboter entfernt ist.

  • Beachten Sie, dass der Wert des Abstandssensors im Armaturenbrett mit  > 3000 mm angegeben wird. Der Abstandssensor kann Objekte innerhalb eines Bereichs von 3000 Millimetern (mm) erkennen. Wenn also ein Objekt nicht erkannt wird, wird der Wert als größer als (>) 3000 mm gemeldet. 

Da sich die if else -Anweisung innerhalb einer unendlichen while -Schleife befindet, kehrt das Projekt an die Spitze der unendlichen while -Schleife zurück, um den Zustand der if else -Anweisung wiederholt zu überprüfen. Diese Schleife wird endlos fortgesetzt und weist den VR-Roboter an, die Bedingung wenn sonst hunderte Male pro Sekunde zu überprüfen.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.

  • Beachten Sie, dass die Befehle drive und turn innerhalb der if else Anweisung keine Wartebefehle sind. Nicht wartende Befehle stoppen den Fluss eines Projekts nicht, während sie ausgeführt werden.  Ein Nicht-Warten-Verhalten, das in einer if else -Anweisung ausgeführt wird (z. B. "Vorwärts fahren, wenn Objekt erkannt wird"), wird fortgesetzt, während die Bedingung überprüft wird, und ändert sich nur, wenn sich die Bedingung ändert.

Zur Kenntnisnahme

Eine if else -Anweisung wird verwendet, um sicherzustellen, dass nur eine Zweigstelle im Projekt ausgeführt wird, wenn die Bedingung überprüft wird. Nur eine Instanz oder Bedingung kann jederzeit wahr sein. Das macht das Projekt effizienter.

Der Python-Projektcode mit Pfeilen, die auf die if- und else-Anweisungen zeigen. Oben auf den Pfeilen steht Checks condition of Distance Sensor, um das distance.found_object anzuzeigen, wenn die Anweisung die Bedingung überprüft. Wenn das Objekt erkannt wird, wird der Befehl unter der if-Anweisung ausgeführt, aber wenn kein Objekt erkannt wird, wird der Befehl unter der else-Anweisung ausgeführt.

Vergleichen Sie das aktuelle Projekt mit dem in Einheit 7 erstellten Projekt.  Das Projekt Unit 7 verwendet vier if -Aussagen.

Der Projektcode von Einheit 7 mit einem großen orangefarbenen Pfeil, der den gesamten Code umgibt und mit der while True -Anweisung beginnt und endet. Ein Hinweis auf dem orangefarbenen Pfeil lautet Wenn in der unendlichen while-Schleife enthaltene Anweisungen wiederholt überprüft werden. Grüne Pfeile innerhalb der while True -Anweisung zeigen den Ablauf des Projekts, beginnend mit einzelnen if -Anweisungen, ob eine bestimmte Farbe gesehen wird, und dem Verhalten, das entsprechend durchgeführt werden sollte, ob dies nun ein Verhalten ist oder zur nächsten if -Anweisung übergeht, bis zum Ende, wo alles noch einmal eine Schleife bildet.

Beim Durchlaufen eines Projekts mit mehreren if -Anweisungen könnte es möglich sein, dass mehrere Bedingungen True (oder False) melden, wenn das Projekt die Befehle in der unendlichen while -Schleife durchläuft. Konflikte wie diese könnten dazu führen, dass das Projekt nicht mehr oder langsamer läuft. 

Mit anderen Worten, mehrere  if-Anweisungen in einem Projekt sind wie eine Straße mit mehreren Ausfahrtsrampen. Je nachdem, wohin Sie gehen möchten, würden Sie an verschiedenen Stellen abbiegen.  Wenn du zum Beispiel zur Schule gehst, würdest du links abbiegen; wenn du zum Laden gehst, würdest du rechts abbiegen. Aber was ist, wenn du nicht zur Schule oder in den Laden gehst? Beide Bedingungen würden Falsch melden, und Sie würden auf dem geraden Weg bleiben. Oder was wäre, wenn Sie sowohl in die Schule als auch in den Laden gehen würden? Beide Bedingungen würden True melden, aber Sie können nicht an zwei Standorten gleichzeitig drehen. Ein Diagramm, das einen grauen T-förmigen Schnittpunkt mit drei Richtungspfeilen zeigt - einer zeigt nach links, einer gerade nach oben und einer nach rechts. In der Mitte der Kreuzung befindet sich ein VR-Roboter. Rechts neben dem Diagramm befinden sich zwei bedingte Aussagen im Codeformat: Wenn Sie zur Schule gehen: Biegen Sie links ab und wenn Sie zum Laden gehen: Biegen Sie rechts ab. Die if-Anweisungen sind in schwarz-blauem Text geschrieben, mit if in blau und den Richtungsanweisungen in blau.

 

Um die Analogie fortzusetzen, ist eine if else-Anweisung wie das Fahren zu einer Gabelung auf der Straße – sie zwingt Sie, eine Entscheidung zu treffen. Wenn Sie zur Schule gehen, biegen Sie links ab. Andernfalls biegen Sie rechts ab. Egal wohin du gehst, du biegst entweder links oder rechts ab. Die Verwendung einer if else -Anweisung würde Fehler wie die oben genannten vermeiden, da Sie dadurch gezwungen wären, eine Entscheidung zu treffen, da zu einem bestimmten Zeitpunkt nur eine Bedingung wahr sein kann.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.  

Fragen

Bitte wählen Sie unten einen Link aus, um auf das Lektionsquiz zuzugreifen.

Google Doc / .docx / .pdf