Erkundung - Die Argo trifft Entscheidungen
Mission 1: Wenn, sonst!
Nicht immer sind die Missionen so eindeutig wie vorherigen Kapitel. So kann es durchaus sein, dass die Argo auf einer Mission in eine Situation gerät, in welcher sie, je nachdem welche Welt sie vorfindet, unterschiedliche Entscheidungen treffen muss.
Um ein Gefühl für die Problematik zu erhalten, schauen wir uns zunächst ein einfaches Beispiel an. Direkt im Sektor vor ihr befindet sich ein Power-up. Dieses soll sie aufheben und danach einen Sektor weiterfliegen.
Der nachfolgende Code löst diese einfache Aufgabe.
argo.move() argo.removePow() argo.move()
Würde der Code aber auch funktionieren, wenn sich kein Power-up direkt vor der Argo befindet?
Mission 2: Ein Lösungsverfahren in Python formulieren
Sicherlich ist dir aufgefallen, dass der obige Code den Sonderfall nicht lösen kann. Die Argo explodiert sofort, wenn sie ein nicht vorhandenes Power-up aufheben soll. Daher muss die Argo selbst in der Lage sein zu erkennen, ob in dem Sektor, in dem sich die Argo gerade befindet, ein Power-up liegt oder nicht.if
und else
und setze am Ende beider Zeilen einen Doppelpunkt. Die Zeilen 3 und 5 sind genau vier Leerzeichen nach rechts
eingerückt.
1 argo.move() 2 if argo.onPow(): 3 argo.removePow() 4 else: 5 argo.move()
Mission 3: Captain, unexpected indentation ahead!
Durch das Einrücken der Anweisungen (d.h. der Code ist nach rechts verschoben) wird deutlich, welche
Anweisungen im Fall WENN auf einem Power-up:
bzw. SONST:
ausgeführt werden sollen.
Bevor du die nächsten Versuche mit der neuen Kontrollstruktur machst, aktiviere den Debugmodus in den Einstellungen im Editorfenster.
Speichere die Datei 6.4.2.1_Mission3.spbugmit Rechtsklick > Link speichern unter... auf deinem Rechner. Öffne sie danach direkt in Spacbug unter dem Menüpunkt Datei > Öffnen... im Editorfenster.
- Lies dir den Code durch. Wie verhält sich das Programm in der gegebenen Situation? Überlege zunächst, ohne das Programm auszuführen.
- Da du den Debugmodus aktiviert hast, kannst du dich zeilenweise durch den Code klicken. Mit jedem erneuten Mausklick (oder Taste N bzw. Scollrad) wird die im Editor grün hervorgehobene Zeile ausgeführt. Starte das Programm und überprüfe deine Vermutung.
- Wie musst du die Welt verändern, dass der Code im
else:
-Block ausgeführt wird? - Was passiert, wenn du Zeile 6
argo.putPow()
um vier Leerzeichen nach links verschiebst? Überlege zunächst für beide Situation (mit bzw. ohne Asteroid), wie sich das Programm verhält. Überprüfe deine Vermutung erneut mit aktiviertem Debugmodus.