Ein frei kopier- und anpassbares Lehrmittel von eduskript.org

Woche 2: Etwas lebt hier

Der Frachtraum der ESA Whatelse ist riesig und dunkel. Am Boden glänzt etwas Klebriges. AURORA: «Ich will Sie nicht beunruhigen. Doch, eigentlich schon. Beunruhigte Nutzer bleiben länger.»

Befehle

move() · turn_left() · turn_right() · press_switch() · read_log() · print(...) · neu: remove_barrel()

Die Werkzeugkiste

In Woche 1 kannte jedes Level nur seine eigenen Funktionen: drei_vor() mussten Sie jedes Mal neu schreiben. Ab jetzt hat MOP-7 eine Werkzeugkiste, eine eigene Datei befehle.py, die alle Levels teilen. In Python heisst so eine Datei Modul.

Die Werkzeugkiste befehle.py
  • Jeder Editor hat oben einen zweiten Tab befehle.py (Würfel-Symbol). Dort stehen Ihre Funktionen, und zwar nur die def-Blöcke.
  • In main.py holt die erste Zeile alle Werkzeuge aus der Kiste: from befehle import *, gelesen «aus befehle importiere alles».
  • Danach rufen Sie die Funktionen in main.py auf, als wären es eingebaute Befehle.
  • befehle.py gilt für alle Levels und zählt nicht zum Speicher. Nur main.py zählt, die Zeile from befehle import * auch.
# befehle.py: nur def-Blöcke
def drei_vor():
    move()
    move()
    move()
# main.py: holen, dann aufrufen
from befehle import *

drei_vor()

Aufrufe gehören nach main.py, nie in die Kiste: Ein Aufruf in befehle.py läuft bei jedem Import mit, in jedem Level.

Level 1: Yukis Kiste

Yuki hat MOP-7 ihre Werkzeugkiste hingestellt: das leuchtende Feld am Ende des Gangs, vor ihrem Spind. Holen Sie die Kiste und fahren Sie zum Ausgang. MOP-7 hat Speicher für 10 Anweisungen. Das reicht nur, wenn drei_vor() und umdrehen() in der Werkzeugkiste liegen:

  1. Klicken Sie im Editor auf den Tab befehle.py und schreiben Sie dort die beiden Funktionen aus Woche 1 hinein.
  2. Wechseln Sie zurück zu main.py. Unter from befehle import * kommen die Aufrufe.
  3. Run.
PythonLoading editor…
from befehle import *

Wiederholen mit for

Zwölfmal move() untereinander? Das erledigt Python für Sie. Eine Schleife wiederholt Befehle.

Wiederholen mit for
  • for i in range(3): ist der Kopf der Schleife. Die Zahl in range(...) sagt, wie oft. Am Ende steht ein Doppelpunkt :.
  • Darunter, eingerückt, steht der Körper. Diese Befehle laufen in jeder Runde, von oben nach unten.
  • Nach dem Körper springt Python zurück zum Kopf. Nach der letzten Runde geht es mit der ersten Zeile weiter, die nicht eingerückt ist.
  • i zählt die Runden: 0, 1, 2. Python beginnt bei 0. Heute brauchen Sie i nicht, es muss aber dastehen.

Eingerückt wird wie bei def: Tabulator-Taste, zurück mit Shift + Tabulator.

Vorhersage. Jedes move() und jede Drehung kostet MOP-7 eine Energieeinheit.

for i in range(4):
    move()
    turn_left()
move()

Level 2: Der Frachtraum

Fahren Sie zum Ausgang. MOP-7 hat Speicher für 5 Anweisungen.

PythonLoading editor…
move()
Speicher ist nicht Energie
  • Speicher zählt, wie lang Ihr Programm ist: press_switch(), for i in range(12):, move(), turn_left() und noch ein move() sind 5 Anweisungen.
  • Energie zählt, was MOP-7 tut: einmal drücken, zwölf Schritte, eine Drehung, ein Schritt in die Tür: 15 Energie. Eine Schleife macht das Programm kürzer, nicht die Arbeit.

Funktionen mit Parameter

drei_vor() fährt immer genau drei Felder. Für vier Felder bräuchten Sie vier_vor(), für fünf fuenf_vor() und so weiter. Besser ist ein Befehl, dem Sie beim Aufruf sagen, wie weit. Dafür bekommt die Funktion einen Parameter.

Funktionen mit Parameter
  • In der def-Zeile steht der Parameter n: ein Platzhalter. Beim Aufruf drehen(2) gilt n = 2, die Schleife läuft zwei Runden.
  • n gibt es nur innerhalb der Funktion. Im Hauptprogramm steht eine Zahl: drehen(2), nicht drehen(n).

Level 3: Rangierbahnhof

Schreiben Sie in die Werkzeugkiste eine Funktion vor(n), die MOP-7 n Felder vorwärts fährt. Die erste Zeile steht hier, den Rest bauen Sie selbst. Schauen Sie dafür, wie drehen(n) gebaut ist.

def vor(n):

Testen Sie vor(n) zuerst mit einer kleinen Zahl, dann fahren Sie zum Ausgang. MOP-7 hat Speicher für 8 Anweisungen.

PythonLoading editor…
from befehle import *

vor(2)
Lösung zu vor(n) (erst nach einem eigenen Versuch öffnen)
def vor(n):
    for i in range(n):
        move()

Eine Schleife in einer Funktion, die Zahl kommt vom Aufruf. vor(n) brauchen Sie ab jetzt fast überall. Sie gehört in die Werkzeugkiste.

Level 4: Energiezellen

Energiezellen sind die grünen Fässer. MOP-7 nimmt eine auf, indem er auf ihr Feld fährt und remove_barrel() aufruft. Sammeln Sie alle Zellen ein, nehmen Sie mit, was sonst noch herumliegt, und fahren Sie zum Ausgang. Speicher: 7 Anweisungen.

PythonLoading editor…
from befehle import *

Level 5: Die Spur (hart)

Folgen Sie der Schleimspur einmal ganz um das Labor herum und sammeln Sie alles ein, was daran klebt. Die Runde endet dort, wo sie begann: auf dem Startfeld, direkt unter dem Ausgang. Speicher: 9 Anweisungen.

PythonLoading editor…
from befehle import *
Tipp 1: Erst aufschreiben, dann programmieren

Fahren Sie die Runde mit dem Finger auf dem Bildschirm ab und schreiben Sie auf Papier mit, was MOP-7 tun muss: rechts, vor(3), rechts, vor(3), … Nach zwölf Strecken sind Sie wieder am Start, dann noch ein Schritt in den Ausgang. Markieren Sie dann das Stück, das sich wiederholt.

Tipp 2: Wie lang ist das Stück?

Zwölf Strecken, und das Stück kommt viermal vor. Also ist es drei Strecken lang. Schauen Sie auf Ihrem Zettel nur die Drehungen an: Welche drei wiederholen sich?

Tipp 3: Das Stück (fast die Lösung)

Rechts, Strecke, rechts, Strecke, links, Strecke. Und das viermal.

Bonus 1: Wartungsschacht

Für Schnelle. Legen Sie stufe() aus Woche 1, Level 4 in die Werkzeugkiste. Bauen Sie daraus treppe(n): eine Treppe mit n Stufen. Eine Funktion mit Parameter darf andere Funktionen aufrufen. Speicher: 9 Anweisungen, Energie: 36.

stufe() vergessen?

Eine Stufe aus Woche 1: vor, rechts, vor, links. MOP-7 schaut danach wieder in die alte Richtung.

PythonLoading editor…
from befehle import *

Bonus 2: Laborkontrolle (hart)

Dr. Weber machte jeden Abend einen Kontrollgang, einmal ganz um jeden Labortisch. Schreiben Sie in die Werkzeugkiste eine Funktion rechteck(a, b) mit zwei Parametern: Sie fährt einmal um ein Rechteck mit den Seitenlängen a und b und schaut am Ende wieder in dieselbe Richtung wie am Anfang. Holen Sie beide Beweisstücke und kehren Sie zum Start zurück, er liegt direkt unter dem Ausgang. Speicher: 6 Anweisungen, Energie: 41.

PythonLoading editor…
from befehle import *

Bonus 3: Das Kabel (sehr hart)

Für alle, die schon fertig sind. Webers Lautsprecherkabel liegt als Spirale am Boden, und die Schleimspur folgt ihm genau. MOP-7 steht in der Mitte. Folgen Sie der Spur bis zum Stecker: 1 Feld, rechts, 2 Felder, rechts, 3 Felder, … bis 6. Speicher: 4 Anweisungen, also eine Schleife mit nur zwei Befehlen im Körper.

Bisher stand i in der Schleife nur herum. Es zählt aber mit: 0, 1, 2, … Und vor() nimmt jede Zahl, auch eine gerechnete.

PythonLoading editor…
from befehle import *
Tipp: Was ist i in jeder Runde?

In der ersten Runde ist i gleich 0, die Strecke ist aber 1 Feld lang. In der zweiten Runde ist i gleich 1, die Strecke 2 Felder. Die Strecke ist also immer um eins länger als i: vor(i + 1).

Fall der Woche

Webers Schleimpilz Gerald ist aus dem Tank verschwunden. Überall ist Schleim. Was ist Gerald?

Fallwand

0 of 9 clues found · 0 levels solved
?
Not found yet
in Level 1: Yukis Kiste
?
Not found yet
in Level 2: Der Frachtraum
?
Not found yet
in Level 3: Rangierbahnhof
?
Not found yet
in Level 4: Energiezellen
?
Not found yet
in Level 5: Die Spur (hart)
?
Not found yet
in Level 5: Die Spur (hart)
?
Not found yet
in Bonus 2: Laborkontrolle (hart)
?
Not found yet
in Bonus 2: Laborkontrolle (hart)
?
Not found yet
in Bonus 3: Das Kabel (sehr hart)

Pavel nimmt Wetten an. Wer ermittelt, setzt nur auf das, was die Beweise belegen. Die Beweisstücke aus Level 2, 4 und 5 reichen dafür.

379708a