lehrkraefte:snr:informatik:glf23:python:funktionen

Funktionen

… oder Miniprogramme oder: Wie man grössere Programme übersichtlich gestaltet.

Mit der Klasse schrittweise geschriebenes Programm (im Editor und an der Tafel):

Mit der Klasse schrittweise geschriebenes Programm (im Editor und an der Tafel):

funktionen-begruessung.py
def begruessung():
    print("Hallo!")
    print("Ich bin eine Funktion.")
 
def saluto(s):
    print("Buongiorno " + s + "!")
 
def salutation(name, sprache):
    if sprache == 1:
        print("Bonjour " + name + " !")
    else:
        print("Buongiorno " + name + "!")
 
begruessung()
 
saluto("Pinocchio")
saluto("Papagena")
 
salutation("Pinocchio", 2)
salutation("Jacques", 1)

Zur Terminologie:

  • Die Variable s in der Definition der Funktion saluto ist ein sogenannter Parameter.
  • Beim Aufruf saluto(“Pinocchio”) dieser Funktion ist der String “Pinocchio” das Argument (der übergebene Wert).

Motivation in der 2pG

Motivation in der 2pG

Wiederholung: Dreieck zeichnen.

Will nun 5 Dreiecke an verschiedenen Positionen (und Starwinkeln) auf Bildschirm zeichnen. Schülerin hatte Idee, einen Befehl dreieck zu bauen. Dies am Computer programmiert (mit setposition). Frage nach penup, pendown kam auf. Dann Befehl stift(farbe, dicke) programmiert (so habe gleich Parameter bzw. Argumente im Aufruf).

Erinnerung zur Turtle-Grafik: Das Grundgerüst eines Turtle-Programms sieht wie folgt aus.

from turtle import *
% Hier Programmcode
% einfügen.
exitonclick()

Öffne ein neues Python-Programm.

  • Schreibe eine Funktion dreieck. Wenn man diese Funktion aufruft, soll die Turtle ein gleichseitiges Dreieck der Seitenlänge 100 zeichnen.
  • Teste deine Funktion, indem du die Funktion aufrufst. Hinweis: Klammern nicht vergessen beim Aufruf!
  • Schreibe eine Funktion triangolo mit einem Parameter a. Wenn man diese Funktion aufruft, soll die Turtle ein gleichseitiges Dreieck der Seitenlänge a zeichnen.
  • Teste mit einem Funktionsaufruf, ob die Funktion triangolo das Gewünschte tut.
  • Schreibe eine Funktion vieleck mit zwei Parameter a und n. Wenn man diese Funktion aufruft, soll die Turtle ein reguläres $n$-Eck der Seitenlänge a zeichnen.
  • Teste, ob die Funktion vieleck das Gewünschte tut.
  • Rufe nun deine drei Funktionen mehrfach hintereinander auf, eventuell mit Wechsel der Stiftdicke (z. B. pensize(10)) oder Wechsel der Zeichenfarbe (z. B. pencolor(“blue”)).
  • Bonus: Du kannst auch eine while-Schleife verwenden, um beispielsweise mehrere ineinanderliegende 6-Ecke verschiedener Grössen zu zeichnen.

Mit dem Schlüsselwort return erreicht man, dass eine Funktion einen Wert retourniert. Beachte: Sobald in der Definition einer Funktion ein Return-Befehl erreicht wird, wird die Ausführung der Funktion beendet.

funktionen-mit-rueckgabewert.py
def wurzel(n):
    return n ** 0.5
 
def betrag(x):
    if x >= 0: 
        return x
    else:
        return -x
 
def ist_durch_drei_teilbar(n):
    return n % 3 == 0
 
def arithmetisches_mittel(a, b):
    return (a + b) / 2
 
print(wurzel(2))
print(wurzel(3))
 
print(betrag(3))
print(betrag(-5))
 
print(ist_durch_drei_teilbar(111))
print(ist_durch_drei_teilbar(112))
 
print(arithmetisches_mittel(10, 100))

Öffne ein neues Python-Programm (Name etwa aufgabe-funktionen-mit-rueckgabewert.py).

  • Schreibe eine Funktion zwei_hoch, die 2 in die gewünschte Potenz erhebt. Z. B. soll der Funktionsaufruf zwei_hoch(10) die Zahl $2^{10}=1024$ liefern.
  • Teste deine Funktion, etwa per print(zwei_hoch(10)). Bonus: Gib mit einer Schleife die ersten 10 Zweierpotenzen $2^0, 2^1, \dots, 2^{10}$ aus.
  • Schreibe eine weitere Funktion geometrisches_mittel, die das geometrische Mittel $\sqrt{a \cdot b}$ zweier nicht-negativer Zahlen berechnet. Z. B. soll der Funktionsaufruf geometrisches_mittel(4, 9) die Zahl $6$ liefern.
  • Teste deine Funktion.
  • Schreibe eine weitere Funktion minimum, die das Minimum (= die kleinere) zweier Zahlen berechnet. Z. B. soll der Funktionsaufruf minimum(-3, -5) die Zahl $-5$ liefern.
  • Teste deine Funktion.

Lies die Definition der Funktion was_berechnet_diese Funktion und finde (möglichst ohne Computereinsatz) heraus, was sie berechnet!

Einnerung: // und % berechnen Wert (= Ganzzahlquotient) und Rest der ganzzahligen Division.

def was_berechnet_diese_funktion(n):
    s = 0
    while n > 0:
        s = s + n % 10
        n = n // 10
    return s

Bonus-Aufgaben

Wer mehr Lust auf Primzahlen als auf Turtle-Grafik hat, bearbeite zuerst Aufgabe 5.

Lass das folgende Programm laufen und steuere die Turtle mit den vier Pfeiltasten und den Tasten “p” und “q”. Die Turtle sagt dir, dann, was du zu tun hast!

Bonus: Erweitere das Programm selbständig: Etwa Farbwechsel, Ändern der Liniendicke, Anheben des Zeichenstifts etc. bei entsprechenden Tastendrücken.

tastaturgesteuerte-turtle.py
from turtle import *
 
title("Turtle-Zeichenprogamm: Verwende die Pfeiltasten, p, q und Escape")
showturtle()
 
def vorwaerts():
    forward(50)
 
def links():
    left(60)
 
def rechts():
    write('Bitte Code ändern, so dass die Turtle um 60 Grad nach rechts abbiegt.')
 
def rueckwaerts():
    backward(50)
 
def quadrat():
    write('Bitte Code ändern, so dass ein Quadrat gezeichnet wird.')
 
def polygon():
    n = int(textinput("Polygon", "Anzahl der Ecken: "))
    a = int(textinput("Polygon", "Länge der Seiten: "))
    write('Bitte Code ändern, so dass ein regelmässiges n-Eck der Seitenlänge a gezeichnet wird.')
 
    # Nach den textinput-Befehlen muss man den "listener" wieder aktivieren.
    listen()
 
onkey(vorwaerts, "Up")  
# Drücken der Nach-oben-Pfeiltaste führt 
# zum Aufruf der Funktion "vorwaerts". 
# (Sobald das Programm im "listen"-Modus ist.) 
onkey(links, "Left")
onkey(rechts, "Right")
onkey(rueckwaerts, "Down")
onkey(quadrat, "q")
onkey(polygon, "p")
onkey(exit, "Escape")
 
listen()   # Aktiviert den listener-Modus: 
           # Tastendrücke führen zum Ausführen
           # der entsprechenden Funktion. 
mainloop() # eine Art Endlosschleife, die auf Tastatureingaben wartet.

(wie immer: neues Python-Programm öffnen)

  • Schreibe eine Funktion ist_prim mit einem Parameter n, die True oder False liefert abhängig davon, ob das Argument eine Primzahl ist. Z. B. soll ist_prim(5) den Wert True liefern.
  • Teste deine Funktion mit allen Zahlen zwischen 1 und 10. (Beachte: 1 ist keine Primzahl).
  • Nutze diese Funktion, um eine Liste aller Primzahlen bis 1000 auszugeben.

Falls du die Primzahlen nebeneinander (statt untereinander) ausgeben möchtest: Verwende

print(..., end=", ")

Dies sorgt dafür, dass nach der Ausgabe ein Kommazeichen und ein Leerzeichen folgt und nicht in eine neue Zeile gewechselt wird.

Turtle-Programm mit den Funktionen dreieck, triangolo und vieleck

Turtle-Programm mit den Funktionen dreieck, triangolo und vieleck

funktionen-turtle.py
from turtle import *
 
def dreieck():
    i = 0
    while i < 3:
        forward(100)
        left(120)
        i = i + 1
 
def triangolo(a):
    i = 0
    while i < 3:
        forward(a)
        left(120)
        i = i + 1
 
def vieleck(a, n):
    i = 0
    while i < n:
        forward(a)
        left(360/n)
        i = i + 1
 
dreieck()
 
triangolo(123)
triangolo(200)
 
vieleck(77, 5)
vieleck(27, 11)
 
exitonclick()
  • lehrkraefte/snr/informatik/glf23/python/funktionen.txt
  • Last modified: 2023/11/15 10:11
  • by Olaf Schnürer