Skip to main content

Lektion 2: Verwenden einer While-Schleife

In dieser Lektion erstellen Sie ein Projekt mit dem Stoßstangensensor und der  while-Schleife. In der Mini-Challenge wendest du diese Fähigkeiten an, um vom Beginn des Mauerlabyrinths bis zum Buchstaben „A“ zu navigieren.

Der Wandlabyrinth-Spielplatz zeigt nicht das Armaturenbrett des Spielplatzes. Der VR-Roboter hat eine Wand vor sich, die er berührt, was darauf hinweist, dass er sich drehen muss, um im Labyrinth vorankommen zu können.

Lernergebnisse

  • Stellen Sie fest, dass das Projekt mit nicht wartenden Befehlen fortgesetzt wird, auch wenn das Verhalten des Befehls noch nicht abgeschlossen ist.
  • Stellen Sie fest, dass ein Wartebefehl das Verhalten vervollständigt, bevor Sie mit dem Projekt fortfahren.
  • Identifizieren Sie, dass die  while-Schleife wiederholt eine boolesche Bedingung überprüft und nicht zum nächsten Befehl wechselt, bis die Bedingung True meldet.
  • Identifizieren Sie, dass die  while-Schleife mit nicht wartenden Befehlen (z. B. Antrieb) verwendet wird, um den Sensorzustand zu überprüfen.
  • Erkennen Sie, dass das Schlüsselwort „ not den Wert einer Booleschen Bedingung von „True“ in „False“ oder von „False“ in „True“ umkehrt. 
  • Stellen Sie fest, dass die Befehle left_bumper.pressed und right_bumper.pressed  einen True- oder False Wert in einer while -Schleife zurückgeben.
  • Beschreiben Sie, wie Sie ein Projekt erstellen, bei dem ein VR-Roboter vorwärts fährt, bis der Stoßstangensensor gedrückt wird.

While Loops

Die while-Schleife akzeptiert boolesche Bedingungen. Während Schleifen wiederholt einen booleschen Zustand überprüfen und den Projektablauf steuern. Die  while-Schleife wird fortgesetzt, solange die Bedingung& wahr ist. Die while-Schleife verlässt die Schleife und wechselt zum nächsten Befehl außerhalb der Schleife, sobald die Bedingung als Falsch gemeldet wird.

Die VEXcode VR Python Toolbox. Der while-Befehl ist rot hervorgehoben, wobei ein Pfeil auf die Codierungsoberfläche zeigt. Der Code liest def main():, while condition:, wait(5, MS), nachdem der while-Befehl aus der Toolbox in die Codierungsschnittstelle gezogen wurde.

Im Wesentlichen weist eine  while-Schleife den VR-Roboter an, ein Verhalten fortzusetzen, während eine bestimmte Bedingung erfüllt ist. Die Logik ist ähnlich wie bei diesem Szenario: Während die Sonne scheint, geh draußen spielen. Was würden Sie tun? Der Zustand „die Sonne scheint“ bestimmt, wo Sie sein sollten. Wenn die Sonne scheint, ist der Zustand Wahr, also spielst du draußen. Wenn die Sonne untergeht, ist dieser Zustand falsch, also kommst du wieder rein.

Auf der linken Seite ist ein Codebeispiel zu lesen, während die Sonne scheint:, draußen spielen. Nach der while-Anweisung, die es liest, kommt es rein. Auf der rechten Seite ist ein Mädchen, das an einem sonnigen Tag vor ihrem Haus Fahrrad fährt. Nach dem Kodex wird sie draußen spielen, bis die Sonne nicht mehr scheint, und dann hineingehen.

While Loops und das Problem des Mauerlabyrinths

Die gleiche Logik gilt für den VR-Roboter im Wandlabyrinth. Während der Stoßfängersensor nicht gedrückt wird, sollte der VR-Roboter weiter vorwärts fahren. Wenn es gedrückt wird, sollte es anhalten oder sich drehen. Wenn wir  while-Schleifen in Verbindung mit nicht wartenden Befehlen wie Drive verwenden, können wir den VR-Roboter so programmieren, dass er genau das tut. Die Befehle des Stoßfängersensors verwenden jedoch den Zustand, in dem der Stoßfängersensor gedrückt wird (left_bumper.pressed oder right_bumper.pressed). Um den VR-Roboter so zu programmieren, dass er fährt, während der Stoßfängersensor nicht gedrückt wird, müssen wir einen  NOT-Operator verwenden.

def main():
	while not Bedingung:
		wait (5, MS)

Zur Kenntnisnahme

Nicht-Warten und Warten-Befehle bestimmen, wann der nächste Befehl ein Verhalten beginnt. Wartende Befehle wie drive_for und turn_for vervollständigen ihr Verhalten, bevor sie mit dem nächsten Befehl im Projekt fortfahren. Nicht wartende Befehle, wie Drive und Turn, wechseln weiterhin zum nächsten Befehl im Projekt, auch wenn das Verhalten des nicht wartenden Befehls nicht abgeschlossen ist.

Wartende Befehle

drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.turn_for(RIGHT, 90, DEGREES)

Nicht wartende Befehle

drivetrain.drive(VORWÄRTS)
drivetrain.turn(RECHTS)

Das Nicht-Schlüsselwort

Das Schlüsselwort not wird typischerweise bei while -Schleifen verwendet, um die Befehle innerhalb der -Schleife auszuführen, während die Bedingung „False“ zurückgibt. Um das Beispiel "Sonne scheint" zu verwenden, kann der gleiche Effekt mit einem NICHT-Operator erreicht werden. Kommen Sie herein, solange die Sonne und nicht scheint.

Auf der linken Seite zeigt ein Stück Beispielcode, lesen, während die Sonne nicht scheint:, komm rein. Nach dem while-Befehl wird draußen gespielt. Rechts zeigt ein Haus in der Nacht, wo der Mond draußen ist. Nach diesem Code wird niemand draußen spielen und drinnen bleiben, solange die Sonne nicht scheint.

Im Wandlabyrinth ist dies nützlich, damit wir den VR-Roboter so codieren können, dass er vorwärts fährt, während der Stoßstangensensor nicht gedrückt wird. Die Bedingung ist immer noch "wenn der Stoßfängersensor gedrückt wird", aber auf diese Weise bleibt der Projektfluss in der Schleife, wenn er Falsch meldet (nicht gedrückt). Wenn der Stoßstangensensor gedrückt wird, ist die Bedingung dann True, so dass das Projekt aus der Schleife bewegt wird.Ein Projektablaufdiagramm, das den Ablauf eines Projekts mit einer while-not-Struktur beschreibt. Auf der linken Seite liest sich das Projekt in der Hauptdefinition wie bei nicht gedrückter linker Stoßstange, mit einer Vorwärtsfahrt, und warten Sie 5 Millisekunden auf den Befehl innerhalb der Schleife. Außerhalb der Schleife befindet sich ein Stoppbefehl. Rechts zeigt der mit einem zyklischen roten Pfeil dargestellte Projektablauf, dass, während der Stoßfänger nicht gedrückt wird, dieser Zustand falsch zurückgibt und der Roboter vorwärts fährt. Als nächstes zeigt ein gerader grüner Pfeil nach unten, der veranschaulicht, dass, wenn die Stoßstange gedrückt wird, die Bedingung wahr zurückgegeben wird und das Projekt aus der Schleife ausbricht, was dazu führt, dass der Roboter aufhört zu fahren.

Zur Kenntnisnahme

Das Schlüsselwort not ist ein logischer Operator, der den Wert eines Booleschen Werts invertiert. Wenn Sie das Schlüsselwort  nicht vor einen Befehl setzen, der einen booleschen Wert zurückgibt, wird True in False und False in True invertiert. Stellen Sie sich zum Beispiel vor, dass der linke Stoßstangensensor am VR-Roboter gedrückt wird und der  Befehl left_bumper.pressed True zurückgibt. Das Schlüsselwort not invertiert den Booleschen Wert und sorgt dafür, dass dieser Ausdruck „False“ zurückgibt.

not left_bumper.pressed()

Abhängig von den von Ihnen verwendeten Sensordaten kann das Schlüsselwort nicht erforderlich sein, damit ein VR-Roboter das gewünschte Verhalten ausführt. 

def main():
	while not left_bumper.pressed():
		drivetrain.drive(FORWARD)
		wait(5, MSEC)
	drivetrain.stop()

Erstellen eines Projekts mit einer  While-Schleife und dem Bumper-Sensor

Projekt benennen und speichern

  • Öffnen Sie ein neues Textprojekt und wählen Sie den Wall Maze Playground aus, wenn Sie dazu aufgefordert werden. Der Wandlabyrinth-Spielplatz-Auswahlkachel liest Wandlabyrinth auf der Unterseite und zeigt das Labyrinth oben.
  • Benennen Sie das Projekt Unit4Lesson2.Die VEXcode VR-Symbolleiste. Der Projektname in der Mitte der Symbolleiste lautet Einheit 4 Lektion 2 und ist mit einem roten Kästchen hervorgehoben.

     

  • Ziehen Sie den Befehl while in den Arbeitsbereich oder geben Sie ihn dort ein, um den Befehl „Drivetrain“ zu ersetzen, der automatisch als Teil eines neuen Textprojekts eingefügt wird. Beachten Sie, dass sich innerhalb der Schleife ein Wartebefehl befindet. Entfernen Sie nicht den  Wartebefehl, um sicherzustellen, dass der VR-Roboter das Projekt korrekt ausführt. Ihr Projekt sollte wie folgt aussehen:

    def main():
    	while Bedingung:
    		wait(5, MS)
  • Geben Sie einen NICHT-Operator nach dem 'while' im while-Befehl ein. Ihr Projekt sollte nun so aussehen:

    def main():
    	while not Bedingung:
    		wait(5, MS)
  • Ziehen oder geben Sie den Befehl left_bumper.pressed in die while-Schleife 'condition' ein. Die Befehle in der Schleife werden ausgeführt, während die Bedingung nicht wahr ist, d. h. wenn der linke Stoßfängersensor nicht gedrückt wird. Ihr Projekt sollte nun so aussehen:

    def main():
    	während nicht left_bumper.pressed():
    		wait(5, MS)
  • Ziehen oder tippen Sie den Laufwerksbefehl in die  while-Schleife. Stellen Sie sicher , dass der Drive-Befehl und der Wait-Befehl innerhalb der  while-Schleife korrekt eingerückt sind, damit die Schleife wie vorgesehen läuft. Sie können die Führungslinien als visuelle Hilfe verwenden. Ihr Projekt sollte nun so aussehen:

    def main():
    	while not left_bumper.pressed():
    		antriebsstrang.antrieb(VORWÄRTS)
    		warten(5, MS)
  • Ziehen oder geben Sie einen Stoppbefehl außerhalb der  while-Schleife ein. Stellen Sie sicher, dass der  Stoppbefehl mit der  while-Schleife ausgerichtet und nicht eingerückt ist, damit er wie beabsichtigt außerhalb der Schleife läuft. Sie können die Führungslinien als visuelle Hilfe verwenden.  Ihr Projekt sollte nun so aussehen:

    def main():
    	while not left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
    	drivetrain.stop()
  • Öffnen Sie das Playground-Fenster , wenn es noch nicht geöffnet ist. Achte darauf, dass sich der Wall Maze Playground öffnet. 
  • Führen Sie das Projekt aus.
  • Beobachten Sie den VR-Roboter vom Beginn des Wandlabyrinths an und halten Sie an, wenn der Stoßstangensensor von der Wand gedrückt wird.
  • Der Befehl Drive ermöglicht es dem VR-Roboter, weiter vorwärts zu fahren, während er den Zustand des Stoßstangensensors mit dem Befehl Left Bumper Pressed überprüft. Sobald der  Befehl left_bumper.pressed als True gemeldet wird, wechselt der VR-Roboter zum nächsten Befehl außerhalb der Schleife und stoppt die Fahrt.

Wählen Sie die Schaltfläche Weiter um mit dem Rest dieser Lektion fortzufahren.