MINT üben

Programmieren mit Python

Zehn Aufgaben zum Begründen und Beurteilen — hier zählt, dass du erklären kannst, warum ein Programm genau das tut, was es tut.

Dein Fortschritt:
0 / 0 Aufgaben
3

Aufgabenblock — AFB III

Begründen statt nur ausführen: Fehlermeldungen deuten, Programme vergleichen, Aussagen beurteilen und Programme weiterentwickeln. Formuliere deine Antwort erst selbst in ganzen Sätzen, bevor du die Musterlösung aufklappst.

A1
print oder return?
AFB III

Lina erwartet die Ausgabe 11. Stattdessen erscheint 10 und danach eine Fehlermeldung. Begründe die Ausgabe und die Fehlermeldung und gib die Korrektur an.

def verdopple(x):    print(2 * x)ergebnis = verdopple(5)print(ergebnis + 1)
10
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

Hinweis: Überlege, was in der Variablen ergebnis gespeichert wird.

Strategie: Eine Funktion ohne return gibt automatisch None zurück.Warum so? Man muss zwischen „etwas anzeigen“ und „etwas zurückgeben“ unterscheiden.
Lösungsskizze: print zeigt 10 an · Rückgabewert None · None + 1 → TypeError · Korrektur: return 2 * x.
Musterlösung anzeigen (zählt als erledigt)

Musterlösung: Die Funktion zeigt 2 · 5 = 10 zwar mit print in der Konsole an, gibt aber nichts zurück. Eine Funktion ohne return liefert den besonderen Wert None. In Zeile 4 wird also ergebnis = None gespeichert. In Zeile 5 soll None + 1 gerechnet werden — das geht nicht, deshalb der TypeError. Richtig ist return 2 * x statt print: Dann ist ergebnis = 10 und die Ausgabe 11.

def verdopple(x):    return 2 * xergebnis = verdopple(5)print(ergebnis + 1)
A2
/ oder //?
AFB III

Das Programm soll dreimal einen Stern ausgeben, bricht aber mit TypeError: 'float' object cannot be interpreted as an integer ab. Begründe den Fehler, obwohl 9 durch 3 doch aufgeht, und vergleiche zwei Möglichkeiten der Korrektur.

anzahl = 9for i in range(anzahl / 3):    print("*")

Hinweis: Welchen Datentyp liefert / — und welchen braucht range()?

Strategie: Frag nicht nach dem Zahlenwert, sondern nach dem Datentyp.Warum so? Python entscheidet über den Typ am Operator, nicht am Ergebnis.
Lösungsskizze: 9 / 3 = 3.0 (float) · range braucht int · Korrektur: // oder int(anzahl / 3) · // bleibt immer ganzzahlig.
Musterlösung anzeigen (zählt als erledigt)

Musterlösung: Der Operator / liefert in Python immer einen float, auch wenn die Division aufgeht: 9 / 3 ergibt 3.0. range() kann aber nur mit ganzen Zahlen (int) zählen — mit 3.0 weiß Python nicht, wie oft wiederholt werden soll. Korrektur 1: anzahl // 3 teilt ganzzahlig und liefert 3. Korrektur 2: int(anzahl / 3) wandelt 3.0 in 3 um. Beide funktionieren hier; // ist kürzer und macht schon beim Lesen klar, dass eine ganze Zahl gemeint ist. Bei anzahl = 10 liefern beide 3 — der Rest fällt jeweils weg.

anzahl = 9for i in range(anzahl // 3):    print("*")
A3
for oder while?
AFB III

Beide Programme geben 2, 4, 6, 8, 10 untereinander aus. Vergleiche sie und erläutere an einem eigenen Beispiel, wann nur eine while-Schleife in Frage kommt.

for zahl in range(2, 11, 2):    print(zahl)
zahl = 2while zahl <= 10:    print(zahl)    zahl = zahl + 2

Hinweis: Frag dich, ob man vor dem Start weiß, wie oft wiederholt wird.

Strategie: Zähle, wie viele Zeilen sich um die Zählvariable kümmern.Warum so? Vergleichen heißt: Gemeinsamkeiten und Unterschiede nennen.
Lösungsskizze: for: Anzahl vorher bekannt, Zähler automatisch · while: Bedingung, Zähler selbst verwalten · Beispiel: Eingabe wiederholen, bis sie stimmt.
Musterlösung anzeigen (zählt als erledigt)

Musterlösung: Beide Programme liefern dieselbe Ausgabe. Bei der for-Schleife kümmert sich range(2, 11, 2) um alles: Startwert, Schrittweite und Ende. Bei der while-Schleife muss man den Startwert selbst setzen, die Bedingung formulieren und zahl in der Schleife erhöhen — vergisst man die letzte Zeile, entsteht eine Endlosschleife. Deshalb nimmt man for, wenn die Anzahl der Durchläufe vorher feststeht. while braucht man, wenn eine Bedingung entscheidet und niemand vorher weiß, wie oft es nötig ist — zum Beispiel eine PIN-Abfrage, die so lange wiederholt wird, bis die richtige PIN kommt:

pin = input("PIN? ")while pin != "1234":    print("Falsch, noch einmal.")    pin = input("PIN? ")print("Entsperrt!")