Zum Hauptinhalt springen
Version: 28Gj

5. Parameter ⊕⊖

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.

Zur Erinnerung
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, ohne die Reihenfolge der Einzelschritte zu verändern.
Aufgabe 1

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)
Laden...

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.

2. Unterprogramme mit Parametern

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?
Laden...

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
Unterprogramm
quadrat
Zeichnet ein Quadrat mit der übergebenen Grösse.
Parametername
size
Englisch für "grösse". Der Parameter beschreibt also, wie gross das Quadrat, welches vom Unterprogramm gezeichnet wird, sein soll.
Es wird eine Zahl erwartet - mit Text oder anderen Werten kann das Unterprogramm nichts anfangen.

Mehrere Parameter

Manchmal ist es praktisch (oder auch nötig), mehrere Parameter an ein Unterprogramm zu übergeben. Das sieht man etwa beim Befehl goto(x, y). Beim obigen Programm könnte etwa auch die Farbe direkt im Unterprogramm quadrat 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.

Häufige Fehler

Ein häufiger Fehler sind vergessene Kommas zwischen zwei Parameternamen. Dann entsteht ein SyntaxError. Die Fehlermeldung macht aber darauf aufmerksam.

goto(100 200)
^^^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
3. Parameternamen
from turtle import *
  1. Definieren Sie das Unterprogramm Namens sechseck mit einem Parameter size, mit welchem ein Sechseck mit der Grösse size gezeichnet werden kann. Rufen Sie das Programm mit sechseck(20) auf.

  2. Erzeugen Sie nun 10 Sechsecke. Das kleinste Sechseck hat die Seitenlänge 10, das grösste die Seitenläng 100.

  3. Fügen Sie der Funktion sechseck(size) den Parameter farbe hinzu und erzeugen Sie damit 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) auf 10 setzen.

Laden...

Wiederholungen

Wiederholung: 🔁 Wiederholte Ausführung

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.

Während Wiederholung 1: i=0, keine Wiederholung abgeschlossen ist.
Während Wiederholung 2: i=1, eine Wiederholung ist bereits abgeschlossen.
Während Wiederholung 3: i=2, zwei Wiederholungen sind bereits abgeschlossen.
Während Wiederholung 4: 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.

Aufgabe 4
  1. 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 mit sqrt(zahl) berechnet werden.

    Haus von Nikolaus

  2. Schreiben Sie ein Unterprogramm move(x, y), welches die Schritte
    1. Stift heben
    2. zur Position x, y gehen
    3. Stift senken
    zusammenfasst.
  3. Mit dem Befehl randint(min, max) aus der Bibliothek random kann eine zufällige ganze Zahl erzeugt werden. Dabei muss der kleinst- und grösstmögliche Wert angegeben werden. Mit move(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össe 30.
Stadt
Stadt
  1. Wählen Sie nun auch die Grösse zufällig: haus(randint(10, 100))
  2. Nun soll auch noch die Farbe zufällig gewählt werden. Der Befehl choice aus der Bibliothek random 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
Laden...
⭐️ Zusatz

Zeichnen Sie folgende Quadrate. Auf wie viele Zeilen können Sie Ihr Programm kürzen?

from turtle import *
Laden...