PythonKara - Welt spiegeln - 1
Um den Umgang mit Listen in Python zu üben, soll nun folgende Programmieraufgabe in PythonKara umgesetzt werden.
Kara soll die gegebene Welt spiegeln. Hierfür soll sie zuerst alle Blätter in der oberen Bildhälfte einlesen und im Anschluss die untere Hälfte der Welt mit Blättern befüllen. Diese strikte Trennung von Dateneingabe, Datenverarbeitung und Datenausgabe wird in der Informatik mit EVA (Eingabe, Verarbeitung, Ausgabe) abgekürzt.
Ausgangslage: | Ziel: |
| |
0. Vorbereitung / allgemeine Programmstruktur
Bevor die Kleeblätter eingelesen werden können, muss zunächst eine Grundstruktur für das Programm erstellt werden. Im Verlauf der Aufgabe werden Ihnen stets mehrere Hilfen zur Verfügung gestellt. Wenn Sie in der Lage sind die Aufgabe ohne Hilfen zu lösen ist dies sehr schön. Wenn Sie noch etwas Hilfe benötigen ist es umso besser, wenn Sie es am Ende schaffen die Aufgabe zu lösen.
Überlegen Sie sich zunächst einen groben Ablauf für das Programm. Hierfür können Sie entweder ein Struktogramm / Programmablaufplan erstellen oder Ihre Gedanken in Form von Pseudocode skizzieren.
Tipp 1 anzeigen (Struktogramm unvollständig)
Eine Idee für den Programmablauf könnte folgendes Struktogramm liefern:
Tipp 2 anzeigen (Struktogramm vollständig)
Eine Möglichkeit das Problem zu lösen stellt folgendes Struktogramm dar:
1. Obere Kleeblätter einlesen
Der erste Schritt des Programms ist es die Kleeblätter oben einzulesen. Hier bietet es sich an eine Funktion zu schreiben, die in einer Reihe nach oben läuft, die Blätter zählt und die Anzahl der Blätter zurück gibt. Programmieren Sie im ersten Schritt diese Funktion.
Da PythonKara keine Möglichkeiten mitbringt eine Liste anzuzeigen können Sie die folgende Funktion zum Anzeigen einer Liste von Integer-Werten verwenden.
Funktion zur Anzeige einer Liste anzeigen
def listToString(l):
result = ""
for ele in l:
result += str(ele)
result += " - "
return result
Tipp 1 anzeigen (unvollständiges Struktogramm)
Tipp 2 anzeigen (vollständiges Struktogramm)
2. Kleeblätter unten schreiben
Die zweite wichtige Funktion des Programms ist es, die eingelesenen Daten zu nutzen um die Blätter nach unten wieder abzulegen. Hierfür wird nun eine weitere Funktion programmiert. Mit dieser Funktion legt Kara eine angegebene Anzahl Blätter in der aktuellen Spalte nach unten.
Tipp 1 anzeigen (Struktogramm unvollständig)
Tipp 2 anzeigen (Struktogramm vollständig)
3. Lösungsvorschlag
Lösungsvorschlag anzeigen
blaetter = []
def leseBlaetterOben():
anzahlBlaetter = 0
kara.turnLeft()
for i in range(4):
kara.move()
if(kara.onLeaf()):
anzahlBlaetter += 1
kara.turnLeft()
kara.turnLeft()
for i in range(4):
kara.move()
kara.turnLeft()
return anzahlBlaetter
def legeBlaetterUnten(anzahl):
kara.turnRight()
for i in range(anzahl):
kara.move()
kara.putLeaf()
kara.turnLeft()
kara.turnLeft()
for i in range(anzahl):
kara.move()
kara.turnRight()
while not kara.treeFront():
blaetter.append(leseBlaetterOben())
kara.move()
blaetter.append(leseBlaetterOben())
kara.turnLeft()
kara.turnLeft()
while not kara.treeFront():
kara.move()
kara.turnLeft()
kara.turnLeft()
position = 0
while not kara.treeFront():
legeBlaetterUnten(blaetter[position])
kara.move()
position += 1
legeBlaetterUnten(blaetter[position])