Ein frei kopier- und anpassbares Lehrmittel von eduskript.org

Übungsaufgaben — gestaffelt nach Schwierigkeit

Diese Seite bündelt Übungsaufgaben zu if ... elif ... else, while, random und Funktionen — von leichten Abwandlungen bekannter Aufgaben bis hin zu kleinen Mini-Projekten, die alles kombinieren. Lassen Sie sich Zeit, und schauen Sie nur in die Lösung, wenn Sie wirklich nicht weiterkommen.

Wetter-Entscheidung

Auto-Grading

Schreiben Sie eine Funktion entscheide_kleidung(temperatur), die basierend auf der Temperatur "T-Shirt" oder "Jacke" zurückgibt.

  • Über 20 Grad: "T-Shirt"
  • 20 Grad oder weniger: "Jacke"
PythonLoading editor…
def entscheide_kleidung(temperatur):
    # Ihr Code hier
    pass

print(entscheide_kleidung(25))  # "T-Shirt"
print(entscheide_kleidung(15))  # "Jacke"
Mögliche Lösung
def entscheide_kleidung(temperatur):
    if temperatur > 20:
        return "T-Shirt"
    else:
        return "Jacke"

Ein klassisches Beispiel für eine einfache Verzweigung. Wenn die Bedingung temperatur > 20 wahr ist, kommt der erste Block (T-Shirt), sonst der else-Block (Jacke). Achten Sie auf den Grenzfall: 20 Grad ist nicht "über 20" — also fällt 20 ins else.

Gerade oder ungerade?

Auto-Grading

Schreiben Sie eine Funktion gerade_oder_ungerade(zahl), die für eine beliebige ganze Zahl die Wörter "gerade" oder "ungerade" zurückgibt mit return.

Tipp: Eine Zahl ist genau dann gerade, wenn zahl % 2 == 0.

PythonLoading editor…
def gerade_oder_ungerade(zahl):
    # Ihr Code hier
    pass

print(gerade_oder_ungerade(4))  # "gerade"
print(gerade_oder_ungerade(7))  # "ungerade"
Mögliche Lösung
def gerade_oder_ungerade(zahl):
    if zahl % 2 == 0:
        return "gerade"
    else:
        return "ungerade"

Der Modulo % 2 ergibt 0 bei geraden Zahlen und 1 bei ungeraden — ein klassisches if/else reicht für die Entscheidung. Wenn Sie sich vergegenwärtigen, dass return eine Funktion beendet, merken Sie, dass man sich das else sparen könnte:

def gerade_oder_ungerade(zahl):
    if zahl % 2 == 0:
        return "gerade"
    return "ungerade"

Rechteck-Fläche

Auto-Grading

Schreiben Sie eine Funktion rechteck_flaeche(breite, laenge), die den Flächeninhalt eines Rechtecks berechnet und zurückgibt.

PythonLoading editor…
def rechteck_flaeche(breite, laenge):
    # Ihr Code hier
    pass

print(rechteck_flaeche(5, 10))   # 50
print(rechteck_flaeche(3, 7))    # 21
Mögliche Lösung
def rechteck_flaeche(breite, laenge):
    flaeche = breite * laenge
    return flaeche

Oder noch kompakter: return breite * laenge. Eine Funktion mit zwei Parametern und einem Rückgabewert — der typische Aufbau, den Sie in der Funktionen-Lektion vom Würfel- und Quader-Volumen kennen.

Bestanden oder nicht

Auto-Grading

Schreiben Sie eine Funktion bestanden(punkte, max_punkte), die prüft, ob der Prozentsatz der erreichten Punkte mindestens 50 % beträgt. Die Funktion soll "Bestanden" oder "Durchgefallen" zurückgeben.

PythonLoading editor…
def bestanden(punkte, max_punkte):
    # Ihr Code hier
    pass

print(bestanden(25, 50))   # "Bestanden" (50%)
print(bestanden(12, 50))   # "Durchgefallen" (24%)
Mögliche Lösung
def bestanden(punkte, max_punkte):
    if punkte / max_punkte >= 0.5:
        return "Bestanden"
    else:
        return "Durchgefallen"

Der Prozentsatz wird durch Division berechnet (punkte / max_punkte). Achten Sie darauf, dass Sie nicht Ganzzahldivision (//) verwenden, sonst könnten z.B. 24 von 50 Punkten fälschlicherweise als 0 % berechnet werden. In Python 3 ist / automatisch eine Gleitkommadivision, was hier richtig ist.

Liste mit Zahlen befüllen

Auto-Grading

Schreiben Sie eine Funktion zahlen_bis(zahl), die eine Liste von 1 bis zahl aufbaut und zurückgibt.

Tipp: Beginnen Sie mit einer leeren Liste ergebnis = [] und nutzen Sie ergebnis.append(...), um Zahlen hinzuzufügen.

PythonLoading editor…
def zahlen_bis(zahl):
    # Ihr Code hier
    pass

print(zahlen_bis(5))  # [1, 2, 3, 4, 5]
print(zahlen_bis(1))  # [1]
Mögliche Lösung
def zahlen_bis(zahl):
    ergebnis = []
    for i in range(1, zahl + 1):
        ergebnis.append(i)
    return ergebnis

Die natürliche Wahl ist hier eine for-Schleife, weil wir die Anzahl Durchgänge ja im Voraus kennen — nämlich genau zahl Mal.

Sie könnten dieselbe Aufgabe auch mit while lösen, müssten dann aber eine Zählvariable selbst hochzählen:

def zahlen_bis(zahl):
    ergebnis = []
    i = 1
    while i <= zahl:
        ergebnis.append(i)
        i += 1  # nicht vergessen, sonst Endlosschleife!
    return ergebnis

Faustregel: for wenn die Anzahl Durchgänge vorher feststeht, while wenn das Ende von einer Bedingung abhängt, die wir während der Schleife laufend prüfen müssen.

Summe bis n

Auto-Grading

Schreiben Sie eine Funktion summe_bis(n), die die Summe aller Zahlen von 1 bis n berechnet und zurückgibt (z.B. für 5 wäre das 1 + 2 + 3 + 4 + 5 = 15).

PythonLoading editor…
def summe_bis(n):
    # Ihr Code hier
    pass

print(summe_bis(5))  # 15
print(summe_bis(10)) # 55
Mögliche Lösung
def summe_bis(n):
    summe = 0
    for i in range(1, n + 1):
        summe = summe + i
    return summe

Eine for-Schleife liegt hier nahe, weil die Anzahl Durchgänge — nämlich n — schon zu Beginn feststeht. Eine Variable summe wird mit 0 initialisiert und in jedem Durchgang um i vergrössert.

Das gleiche Ergebnis erreichen Sie mit einer while-Schleife:

def summe_bis(n):
    summe = 0
    i = 1
    while i <= n:
        summe = summe + i
        i += 1
    return summe

Hier müssen Sie den Zähler i selbst hochzählen — etwas mehr Schreibarbeit als bei for. while wird dann interessant, wenn die Anzahl Durchgänge nicht vorher bekannt ist (siehe z.B. die Zinseszins-Aufgabe weiter unten).

Durch 3 teilbar auflisten

Auto-Grading

Schreiben Sie eine Funktion liste_durch_drei(obergrenze), die alle Zahlen von 1 bis obergrenze durchgeht und nur die durch 3 teilbaren in einer Liste zurückgibt.

Tipp: Eine Zahl ist durch 3 teilbar, wenn zahl % 3 == 0.

PythonLoading editor…
def liste_durch_drei(obergrenze):
    # Ihr Code hier
    pass

print(liste_durch_drei(10))  # [3, 6, 9]
Mögliche Lösung
def liste_durch_drei(obergrenze):
    ergebnis = []
    for i in range(1, obergrenze + 1):
        if i % 3 == 0:
            ergebnis.append(i)
    return ergebnis

Hier kombinieren wir for (zum Durchlaufen der Zahlen), if (zum Prüfen der Teilbarkeit) und .append() (zum Befüllen der Liste). Das Pattern werden Sie als Schweizer Taschenmesser immer wieder brauchen.