Ein weiteres Strukturelement eines Algorithmus sind Parameter. Die Verwendung von Parametern haben wir bereits in Aktion gesehen - im Struktogramm sind alle Parameter unterstrichen, in Python werden alle Parameter als Liste, abgetrennt mit Kommas, in den runden Klammern geschrieben.
Parameter ⊕ ⊖: Das Ergebnis eines Algorithmus kann variiert werden durch Werte, welche bei jeder Ausführung neu festgelegt werden.
Beispiel: Bei einem Online-Rezept kann der Parameter Anzahl Personen mit den Knöpfen ⊕
und ⊖
variiert werden - die Mengenangaben werden dann aktualisiert.
Markieren Sie im folgenden Programm (links) wie folgt:
-
Parameter unterstreichen
-
Befehlsnamen gelb markieren
from turtle import *
goto(20, 30)
for i in range(5):
left(90)
forward(17)
right(90)
forward(29)
Wie können Unterprogramme geschrieben werden, die Parameter akzeptieren?
Untersuchen Sie die folgenden Unterprogramme (führen Sie diese aus!) und notieren Sie sich, was Sie feststellen.
hello.py
def hallo(name):
print('Hallo', name)
hallo('Maria')
hallo('Reto')
hallo('Hans')
rechnen.py
def quotient(zahl1, zahl2):
print(zahl1, ':', zahl2, '=', zahl1 / zahl2)
quotient(2, 3)
quotient(5, 9)
quotient(12, 20 + 4)
⭐️ Was sind die Parameter bei quotient(12, 20 + 4)
? In welcher Reihenfolge werden diese verrechnet?
Unterprogramme mit Parametern
Parameter sind also Werte, die an ein Unterprogramm übergeben werden können. Damit der übergebene Wert im Unterprogramm wiederverwendet werden kann, braucht jeder Parameter einen Namen. Der Wert ist dann über diesen Namen abrufbar. Der Parametername ist frei wählbar, sollte aber seine Bedeutung widerspiegeln.
Beispiel:
from turtle import *
def quadrat(size):
for i in range(4):
forward(size)
left(90)
color('red')
quadrat(50) # ein Quadrat mit der Grösse 50 zeichnen
color('blue')
quadrat(100) # ein Quadrat mit der Grösse 100 zeichnen
Mehrere Parameter
Manchmal ist es praktisch (oder auch nötig), mehrere Parameter an ein Unterprogramm zu übergeben. Das haben wir etwa beim Befehl goto(x, y)
bereits gesehen. Beim obigen Programm könnte etwa auch die Farbe direkt im Unterprogramm square
gesetzt werden:
from turtle import *
def quadrat(size, farbe):
color(farbe)
for i in range(4):
forward(size)
left(90)
quadrat(50, 'red') # ein rotes Quadrat mit der Grösse 50 zeichnen
quadrat(100, 'blue') # ein blaues Quadrat mit der Grösse 100 zeichnen
Es ist prinzipiell möglich, beliebig viele Parameter nacheinander zu übergeben.
Ein häufiger Fehler sind vergessene Kommas zwischen zwei Parameternamen. Dann entsteht ein SyntaxError.
from turtle import *
-
Definieren Sie das Unterprogramm
sechseck(size)
welches ein Sechseck mit der Grössesize
zeichnet. Rufen Sie das Programm mitsechseck(20)
auf. -
Erzeugen Sie nun
10
Sechsecke. Das kleinste Sechseck hat die Seitenlänge10
, das grösste die Seitenläng100
. -
Fügen Sie der Funktion
sechseck(size)
den Parameterfarbe
hinzu und erzeugen Sie mit folgendes Bild:Farben:
violet, indigo, blue, green, lime, lightgreen, yellow, orange, orangered, red
❓ In welcher Reihenfolge müssen die Sechsecke gezeichnet werden, damit genau das obige Bild entsteht?
Tipp: Die Stiftdicke können Sie mit
pensize(10)
auf10
setzen.
Wiederholungen
Mit for i in range(n):
wird eine wiederholte Ausführung vorbereitet. Der nachfolgende Codeblock wird n
Mal wiederholt.
from turtle import *
for i in range(4):
forward(50)
left(90)
Wozu steht eigentlich das i
im for i in range(4)
? Das ist fast wie ein Parameter: i
enthält die Anzahl bereits ausgeführter Wiederholungen.
i=0
, keine Wiederholung abgeschlossen ist.
i=1
, eine Wiederholung ist bereits abgeschlossen.
i=2
, zwei Wiederholungen sind bereits abgeschlossen.
i=3
, drei Wiederholungen sind bereits abgeschlossen.
Der Wert, welcher in i
steht, kann auch verwendet werden:
from turtle import *
def quadrat(size):
for i in range(4):
forward(size)
left(90)
for i in range(10):
quadrat(i * 10 + 10)
⭐️ Zusatzparameter von range()
range(start, ende, schritt)
Der Befehl range
kann mit bis zu drei Parametern arbeiten, wobei start
der erste verwendete Wert, ende
das obere ganzzahlige Limit angibt, welches aber selber nie erreicht wird! und schritt
den Abstand zwischen zwei Zahlen angibt.
for i in range(2, 11, 3):
print(i)
Im obigen Beispiel startet i
bei 2
und wird solange um 3
erhöht, bis die Zahl 11
erreicht oder überschiesst.
! 11 wird nicht angenommen.
-
Kopieren Sie die Definition eines Hauses aus der letzten Übung in dieses Programm. Modifizieren Sie das Unterprogramm
haus(size)
so ab, dass nun die Grösse des Hauses spezifiziert werden kann. Die Wurzel einer Zahl kann mitsqrt(zahl)
berechnet werden. -
Schreiben Sie ein Unterprogramm
move(x, y)
, welches die Schritte-
Stift heben
-
zur Position
x
,y
gehen -
Stift senken
zusammenfasst.
-
-
Mit dem Befehl
randint(min, max)
aus der Bibliothekrandom
kann eine zufällige ganze Zahl erzeugt werden. Dabei muss der kleinst und der grösstmögliche Wert angegeben werden. Mitmove(randint(-20, 20), randint(-20, 20))
kann also die Turtle an eine beliebige Position verschoben werden. Zeichnen Sie 20 Häuser an zufälligen Positionen mit der Grösse30
.
-
Wählen Sie nun auch die Grösse zufällig:
haus(randint(10, 100))
-
Nun soll auch noch die Farbe zufällig gewählt werden. Der Befehl
choice
aus der Bibliothekrandom
gibt jeweils ein zufälliges Element einer Liste zurück:choice([1, 3, 5, 7, 9])
etwa wählt zufällig eine ungerade Zahl zwischen 1 und 10 aus. Die Liste der Farben:
['violet', 'indigo', 'blue', 'green', 'lime', 'lightgreen', 'yellow', 'orange', 'orangered', 'red']
from turtle import *
from math import sqrt
from random import randint, choice
Zeichnen Sie folgende Quadrate. Auf wie viele Zeilen können Sie Ihr Programm kürzen?
from turtle import *
6. Parameter ⊕⊖