Sortenreine Apfelernte in einer Apfelplantage.

Python Funktionen



Ideen: T. Rauschmeier, G. Kompa, Elektronikschule Tettnang
M. Brenner, J. Schnaiter, "Softwareentwicklung mit Python", ZSL Freiburg, 2024

Funktionen in Python dienen zum Auslagern von Programmteilen. Man übergibt beim Funktionsaufruf Werte und erhält von der Funktion einen berechneten Wert zurück. Dadurch werden Programme übersichtlicher, die Fehlersuche vereinfacht sich und Programmteile sind mehrfach verwendbar.

In diesem Artikel lernst Du den Aufbau von Funktionen und deren Anwendung kennen. Begriffe wie Rückgabewert, Parameter und Funktionsname werden erklärt.

Die Apfelsaftpresse 🍎 Auslagern ganzer Programmteile in Funktionen



Apfelpresse

Große Apfelmengen werden in Pressen zu vielen Litern Apfelsaft umgearbeitet. Die Arbeit übernimmt die Presse für viele Obstbauern, die Arbeit wird ausgelagert. Das gleiche Prinzip kann man beim Programmieren anwenden. Wir lagern bestimmte Aufgaben in eigene Unterprogramme aus. Die so erstellten Funktionen erhöhen die Struktur/Übersichtlichkeit und sind mehrfach von Vielen verwendbar. Die Fehlersuche wird vereinfacht und Arbeiten in Projekten lassen sich besser aufteilen.

Für die Berechnung der Saftmenge soll folgende Tabelle verwendet werden:
Apfelsorte Gala Elstar Delicious
Saftausbeute pro 100 kg 75 68 82

Einfache Funktionen

Das Schlüsselwort def leitet eine Funktionsdefinition ein. Es wird ein Name für die Funktion festgelegt, gefolgt von einem Doppelpunkt. Der Inhalt der Funktion muss eingerückt werden.

Beachte: Funktionsnamen beginnen in der Regel mit einem Kleinbuchstaben, da die Funktion etwas ausführt. Außerhalb der Funktion wird der Text wieder ausgerückt.

def meinGedicht():
  print("Ein Hund lief in die Küche")
  print("und stahl dem Koch einen Apfel.\n")

for i in range(5):
  meinGedicht()

Funktionen mit Parameter Übergabe- und Rückgabewerte



Jeder Funktion können Werte mitgegeben werden. Diese Parameter schreibt man in die Klammern hinter dem Funktionsname.
def begruesse(name):
  print(f"Hallo {name},\n wir freuen uns ...")

Beim Funktionsaufruf müssen nun die Parameter mit angegeben werden:
namen = ["Anna", "Michael", "Daniel"]
for name in namen:
  begruesse(name)

In der Parameterliste werden die einzelnen Werte/Variablen mit Komma getrennt geschrieben. Bei mehreren Parametern ist die Reihenfolge der Parameter bei der Definition und dem Aufruf der Funktion identisch zu wählen. Auch Listen dürfen übergeben werden.

Rückgabewert verwenden:
def verdopple(x):
  return: x*2

Beim Aufruf ist darauf zu achten, dass man den Rückgabewert in einer Variablen speichert:
y = verdopple(3)

Begrüßung 👋

Hallo Frau Müller,
Sie haben 12 kg Äpfel 🍎 gekauft.
Vielen Dank für Ihren Einkauf!

  • def begruesse(name, isMale, menge):
      print(f"Hallo {"Herr" if isMale else "Frau"} {name}," )
      print(f"Sie haben {menge} kg Äpfel gekauft.")
      print("Vielen Dank für Ihren Einkauf!")

    begruesse("Müller", False, 12)

Saftmenge berechnen 🔢

100.0 kg Gala ergeben 75.0 l Saft.
Genieße dein Getränk 🥃!

  • def berechneSaftmenge(sorte: str, menge: int) -> float:
      if sorte == "Gala": saft = 0.75*menge
      else: saft = 0.68*menge
      return saft

    sorte = input("Wähle: Gala, Elstar")
    menge = float(input("Gib die Menge in kg ein: "))

    saft = berechneSaftmenge(sorte, menge)
    print(f"{menge} kg {sorte} ergeben {saft:.1f} l Saft.")

Aufgabe 1 Laufende Meter Holzdielen

Die benötigte Menge Holzdielen soll für eine vorgegebene Raumgröße in einer Funktion berechnet werden.

  1. Lege eine neues Notebook 05-Funktionen.ipynb an.
  2. Erstelle das Programm Holzdielen und definiere die Funktione berechneLaufendeMeterDielen. Der Funktion wird die Raumgröße in Quadratmeter übergeben und sie liefert die Holzmenge von 0,2 m breiten Holzdielen in laufenden Metern.
  3. Berechne in der Funktion die laufenden Meter der benötigten Holzdielen

    Um bei einer Raumgröße von 8 m2 die laufenden Meter zu erhalten, teil man diesen Wert durch 0,2: 8 m2/0,2 m = 40 m

  4. Schreibe den Funktionsaufruf: Der Benutzer gibt die Raumgröße ein. Die Funktion berechneLaufendeMeterDielen wird aufgerufen und das Ergebnis am Bildschirm ausgegeben.
  5. Berücksichtige einen Holzverschnitt von 8 % und gib den Gesamtpreis aus, wenn der laufende Meter 25 EUR kostet.
Holzdielen

Die Ausgabe sollte wie folgt aussehen:

Raumgröße: 12.5 qm
Laufende Meter Dielen: 62.5 m


Aufgabe 2 Ordne zu

Ordne den Funktionsaufruf dem Funktionskopf zu oder finde die Fehler.

Welcher Aufruf passt zum Funktionskopf? Wähle eine Antwort.
def add(a: int, b: float) -> int: ..

  1. summe: float = add(2, 3.2)
  2. summe: float = add(3.2, 2)
  3. summe: int = add(2, 3.2)
  4. summe: int = add(2.3, 3)

Welcher Funktionskopf passt zu dem Aufruf? Wähle eine Antwort.
add(4,3.41)

  1. def add2(a: float, b: float) -> int: ..
  2. def add2(a: int, b: float): ..
  3. def add2(a: int, b: float) -> int: ..
  4. def add2(a: str, b: float): ..

Finde die Anzahl der Fehler im folgenden Quelltext.

def suche(a: str, p: int) -> str:
  pass

platz: int = suche("a", "b")

Finde die Anzahl der Fehler im folgenden Quelltext.

bestimmeMenge(a: int, b: int) -> int:
  pass
a: int = 4
terassengroesse: int = bestimmeMenge(a,12)

Welcher Aufruf passt zum Funktionskopf? Wähle eine Antwort.
def anzeigen( ): ..

  1. summe: float = anzeigen( )
  2. anzeigen(2)
  3. anzeigen( )
  4. anzeigen("a")

Welcher Funktionskopf passt zu dem Aufruf? Wähle eine Antwort.
x: float = berechne(4,3.41)

  1. def berechne(a: int, b: float) -> float: ..
  2. def berechne(int a, double b) -> int: ..
  3. def berechne(a: bool, b: float) -> float: ..
  4. def berechne(a: bool, b: float) -> str: ..

Aufgabe 3 Apfelsaft pressen

Zum Einkaufen von frischem Apfelsaft wird ein Programm geschrieben: Man wählt die Apfelsorte, Menge und erhält als Ausgabe entsprechend die Saftmenge und Preise angezeigt.

Hallo Frau Müller,
Sie haben 100 kg Gala 🍎 gekauft.
100.0 kg Gala ergeben 75.0 l Saft.

Ihr Warenkorb 🛒
100 kg Gala ⋅ 0.42 €/kg: 42.00 €
75 l Saft ⋅ 0.07 €/l:     5.25 €
Grundgebühr:             10.00 €
Gesamt:                  57.25 €

  1. Schreibe die Funktiondef begruesse(name: str, isFemale: bool).
  2. Notiere was passiert wenn du beim Funktionsaufruf zu wenig Parameter angibst oder die Reihenfolge der Parameter vertauscht.
  3. Erstelle die Funktion zur Berechnung der Saftmenge def berechneSaftmenge(sorte: str, menge: int) -> float für mindestens drei Apfelsaftsorten. Bei nicht vorhandener Sorte soll eine Fehlermeldung erscheinen.
  4. Notiere was passiert wenn man mitten drin schon einen return aufruft. Kann man auch mehrere Returns in einer Entscheidung verwenden?
  5. Erstelle die Funktion zur Ausgabe des Warenkorbs def anzeigenWarenkorb(sorte, menge, saftmenge).
  6. Schreibe das Programm so um, dass alle wichtigen Werte wie Sorte, kgPreis und Saftausbeute in einer zweidimensionalen Liste gespeichert sind. Übergib bei den Funktionsaufrufen diese Liste

Aufgabe 4 Pyramidenvolumen

Eine Pyramide hat eine rechteckige Grundfläche mit den den Seiten $a$ und $b$ und der Höhe $h$. Die Grundfläche $G$ und das Volumen $V$ berechnet sich wie folgt:
$G=ab$ und $V=\frac{G\cdot h}{3}$.

  1. Erstelle ein Programm Pyramide und definiere die Funktion berechnePyramidenVolumen.
  2. Lass vom Benutzer die Seitenlängen und die Höhe der Pyramide in der main-Funktion eingeben. Rufe die Funktion berechnePyramidenVolumen auf. Der Funktion werden die beiden Seitenlängen und die Höhe der Pyramide übergeben. Das zurückgegebene Volumen wird am Monitor ausgegeben.
  3. Berechne in der Funktion das Pyramidenvolumen und gib den berechneten Wert zurück.
  4. Schreibe einen Algorithmus der das Volumen verschiedener Pyramiden in einer Tabelle auflistet.
Pyramidendach

Die Lösung sollte folgendermaßen aussehen:

Berechnung des Pyramidenvolumens
Länge der Grundseite: 3 m
Breite der Grundseite: 2 m
Höhe der Pyramide: 5 m

Volumen der Pyramide: 10.0 cbm

Übung 5 Mehrwertsteuerrechner

Die Mehrwertsteuer beträgt Anfang 2019 in Deutschland 19 %. Bedingt durch die Coronakrise wird diese im Juli 2020 um drei Prozentpunkte auf 16 % gesenkt.

1 EUR
  1. Erstelle das Programm Mehrwehrtsteuer und definiere die Funktion def berechneSteuervorteil(...) -> float.
  2. Lass vom Benutzer den Bruttobetrag (Kaufpreis inklusive 19 % MwSt.) eingeben. Rufe die Funktion berechneSteuervorteil auf. Der Funktion wird der Bruttobetrag als Parameter übergeben. Die zurückgegebene Steuerersparnis bei verringertem Mehrwertseteuersatz soll ausgegeben werden.
  3. Erstelle die Funktion def berechneMehrwertsteuer (...):, welche den Nettobetrag, den Mehrwertsteuerbetrag und den Bruttobetrag ausgibt.
  4. Schreibe einen Algorithmus der die Steuerersparnis automatisch von 10 verschiedenen Bruttobeträgen auflistet.
  5. Begründe wieso für den Handel die Steuerersparnis um ein vielfaches höher ist, falls er den Steuervorteil nicht an den Kunden weitergibt.

Die Lösung sollte folgendermaßen aussehen:

Mehrwertsteuerrechner
Gib den Bruttobetrag in EUR ein: 120
Steuervorteil ab Juli 2020: 3,03 EUR
_______________________________________

Nettobetrag:  100,84 EUR
16% MwSt:      16,13 EUR
Bruttobetrag: 116,97 EUR

Entspann dich erstmal ...



Das Rätsel im Advent

Idee: I. Supper

Du fährst mit dem Auto und hältst eine konstante Geschwindigkeit ein.

Auf deiner linken Seite befindet sich ein Abhang. Auf deiner rechten Seite fährt ein riesiges Feuerwehrauto und hält die gleiche Geschwindigkeit wie du. Vor dir galoppiert ein Schwein, das eindeutig größer ist als dein Auto und du kannst nicht vorbei. Hinter dir verfolgt dich ein Hubschrauber auf Bodenhöhe. Das Schwein und der Hubschrauber haben exakt deine Geschwindigkeit.

Was unternimmst du, um dieser Situation gefahrlos zu entkommen?

Schwein in Thailand

Vom Kinderkarusell steigen und weniger Glühwein trinken.

Aufgabe 5 Größte Zahl

  1. Erstelle das Programm GroessteZahl und definiere die Funktion def ziehe6aus49(reihe) zum Erzeugen der Zahlenliste.
  2. Schreibe die Funktion def ausgebenZahlenreihe (x) um die unsortierte Zahlenreihe am Monitor auszugeben.
  3. Schreibe die Funktion def bubblesort(bubblereihe) um die Zahlenreihe zu sortieren.
  4. Lass den größten Wert der Reihe ausgeben und teste verschiedene Sortieralgorithmen auf die Geschwindigkeit.
  5. Verhindere das Ziehen von doppelten Zahlen und verwende den "for-each-loop"
from random import randint

def get_random_num_list(length: int) -> list[int]:
    num_list: list[int] = []

    for i in range(length):
        num_list.append(randint(0, 1000))

    print(num_list)
    return num_list

Die Lösung sollte folgendermaßen aussehen:

Die unsortierte Zahlenreihe:
8 3 35 26 33 23

Die sortierte Zahlenreihe:
3 8 23 26 33 35

Die größte Zahl ist: 35

Wortliste und Satzbausteine



die Funktion, -n Eine Funktion ist ein ausgelagerter Programmteil.
die Funktions­definition Die Funktion wird definiert durch den Funktionskopf und den Funktionsrumpf. Der Funktionskopf besteht aus Modifier, Datentyp des Rückgabewertes, Funktionsname und der Parameterliste; der Funktionsrupf aus den Anweisungen inkl. der Rückgabe.
der Funktions­name, -n Der Funktionsname beginnt klein mit einem Verb, da die Funktion etwas ausführt.
die Parameter­liste, -n eine Liste von Datentypen mit Variablennamen, welche beim Funktionsaufruf übergeben werden
der Funktions­aufruf, -e Aufruf eines ausgelagerten Programmteils
der Rück­gabe­wert, -e Wert der aus einer Funktion zurückgegeben wird