MINT lernen

Übung — AFB II (Zusammenhänge herstellen)

Zehn Aufgaben vom Wertetausch bis zur Quiz-Auswertung — Programme Schritt für Schritt verfolgen und die Ergebnisse bestimmen.

Dein Fortschritt:
0 / 0 Aufgaben
2

Aufgabenblock — AFB II

Zehn Aufgaben aus dem ganzen Kapitel: Programme im Kopf ablaufen lassen, Werte in einer Tabelle mitschreiben und in mehreren Schritten zum Ergebnis kommen — mit gestuften Tipps, wenn du nicht weiterkommst.

A1
Werte verfolgen
AFB II

Das Programm rechnet nur mit zwei Variablen.

a = 4b = 10a = a + bb = a - ba = a - bprint(a, b)

a) Welchen Wert hat a am Ende? b) Welchen Wert hat b am Ende?

Ansatz: Leg eine Wertetabelle mit den Spalten a und b an und trag nach jeder Zeile beide Werte ein.
Rechenweg: Zeile 3: a = 4 + 10 = 14. Zeile 4: b = 14 − 10 = 4. Zeile 5: a = 14 − 4 = 10.
Lösung: a) 10 b) 4
Vollständige Lösung
Nach Zeile 3 ist a = 14, b = 10. Zeile 4 rechnet b = 14 − 10 = 4, Zeile 5 rechnet a = 14 − 4 = 10. Die beiden Werte wurden also vertauscht. Falle: In Zeile 5 wird schon mit dem neuen b = 4 gerechnet, nicht mehr mit 10.
A2
Einkauf mit Eingaben
AFB II

Mila tippt nacheinander 4 und 2.5 ein.

stueck = int(input("Stück? "))preis = float(input("Preis? "))gesamt = stueck * preisprint("Gesamt:", gesamt)

a) Welchen Zahlenwert hat gesamt? b) Welchen Datentyp hat gesamt (int, float, str oder bool)?

Ansatz: Überlege für jede Eingabe, welcher Typ nach der Umwandlung entsteht.
Rechenweg: stueck = 4 (int), preis = 2.5 (float). int mal float ergibt float: 4 · 2.5 = 10.0.
Lösung: a) 10 (ausgegeben als 10.0) b) float
Vollständige Lösung
int() macht aus dem Text „4“ die ganze Zahl 4, float() aus „2.5“ die Kommazahl 2.5. Sobald ein float an der Rechnung beteiligt ist, ist auch das Ergebnis ein float: Die Ausgabe lautet Gesamt: 10.0.
A3
Sekunden umrechnen
AFB II

Eine Stoppuhr zeigt nur Sekunden an.

sekunden = 500minuten = sekunden // 60rest = sekunden % 60print(minuten, "min", rest, "s")

a) Welchen Wert hat minuten? b) Welchen Wert hat rest?

min
s
Ansatz: // liefert die vollen Minuten, % die übrig bleibenden Sekunden.
Rechenweg: 8 · 60 = 480 passt in 500, 9 · 60 = 540 nicht mehr. Rest: 500 − 480.
Lösung: a) 8 b) 20
Vollständige Lösung
500 // 60 = 8, denn 8 volle Minuten sind 480 Sekunden. Übrig bleiben 500 − 480 = 20 Sekunden, also 500 % 60 = 20. Ausgabe: 8 min 20 s. Mit 500 / 60 hätte man dagegen 8.333… erhalten.
A4
Darf ich mitfahren?
AFB II

Ein Freizeitpark prüft, wer in eine Achterbahn darf.

groesse = 132alter = 11begleitung = Trueprint(groesse >= 140 or begleitung)print(groesse >= 120 and alter >= 12)print(not begleitung or groesse > 130)

a) Was gibt Zeile 5 aus? b) Was gibt Zeile 6 aus? (True oder False)

Ansatz: Werte zuerst jede einzelne Bedingung zu True oder False aus, dann erst and, or, not.
Rechenweg: Zeile 5: True and False. Zeile 6: not True = False, dann False or True.
Lösung: a) False b) True
Vollständige Lösung
Zeile 5: 132 >= 120 ist True, 11 >= 12 ist False. Bei and müssen beide wahr sein → False. Zeile 6: not wird zuerst ausgewertet: not True = False. 132 > 130 ist True, und bei or reicht eine wahre Seite → True. (Zeile 4 gibt übrigens True aus.)
A5
Die Gießkanne leert sich
AFB II

Jeden Tag wird die Hälfte des Wassers (in ml, ganzzahlig) verbraucht.

wasser = 500tage = 0while wasser >= 60:    wasser = wasser // 2    tage = tage + 1print(tage, wasser)

a) Welchen Wert hat tage am Ende? b) Welchen Wert hat wasser am Ende?

ml
Ansatz: Prüfe vor jedem Durchlauf: Ist wasser noch mindestens 60?
Rechenweg: 500 → 250 → 125 → 62 → 31. Bei 62 läuft die Schleife noch einmal, bei 31 nicht mehr.
Lösung: a) 4 b) 31
Vollständige Lösung
Wertetabelle: (wasser | tage) = (500 | 0) → (250 | 1) → (125 | 2) → (62 | 3) → (31 | 4). Vor dem fünften Durchlauf gilt 31 >= 60 nicht mehr, die Schleife endet. Falle: 125 // 2 ist 62, nicht 62.5 — // schneidet den Rest ab.
A6
Vielfache zählen
AFB II

Die Schleife untersucht die Zahlen von 1 bis 19.

summe = 0anzahl = 0for z in range(1, 20):    if z % 3 == 0:        summe = summe + z        anzahl = anzahl + 1print(anzahl, summe)

a) Welchen Wert hat anzahl am Ende? b) Welchen Wert hat summe am Ende?

Ansatz: z % 3 == 0 ist genau dann wahr, wenn z durch 3 teilbar ist.
Rechenweg: Durch 3 teilbar zwischen 1 und 19: 3, 6, 9, 12, 15, 18.
Lösung: a) 6 b) 63
Vollständige Lösung
range(1, 20) liefert 1 bis 19. Nur für 3, 6, 9, 12, 15 und 18 ist der Rest bei Division durch 3 gleich 0 — das sind 6 Zahlen. Ihre Summe ist 3 + 6 + 9 + 12 + 15 + 18 = 63. Ausgabe: 6 63.
A7
Eine Punkteliste bearbeiten
AFB II

Die Liste wird in drei Schritten verändert.

punkte = [7, 3, 9, 4]punkte.append(6)punkte.pop(1)punkte[0] = punkte[0] + 2print(len(punkte), sum(punkte))

a) Wie viele Elemente hat die Liste am Ende? b) Wie groß ist ihre Summe?

Ansatz: Schreib die Liste nach jeder Zeile komplett auf.
Rechenweg: append → [7, 3, 9, 4, 6]; pop(1) entfernt Index 1 → [7, 9, 4, 6]; dann punkte[0] = 9.
Lösung: a) 4 b) 28
Vollständige Lösung
Nach append: [7, 3, 9, 4, 6]. pop(1) entfernt das Element mit Index 1, also die 3 (nicht das erste Element!): [7, 9, 4, 6]. Dann wird Index 0 um 2 erhöht: [9, 9, 4, 6]. Länge 4, Summe 9 + 9 + 4 + 6 = 28.
A8
Buchstaben zählen
AFB II

Das Programm geht die Zeichenkette Zeichen für Zeichen durch.

satz = "Banane und Ananas"anzahl = 0for zeichen in satz:    if zeichen == "a":        anzahl = anzahl + 1print(anzahl)

a) Was gibt das Programm aus? b) Was gibt es aus, wenn man Zeile 3 zu for zeichen in satz.lower(): ändert?

Ansatz: Python unterscheidet zwischen „a“ und „A“.
Rechenweg: „Banane“: 2 kleine a, „und“: 0, „Ananas“: 2 kleine a und ein großes A.
Lösung: a) 4 b) 5
Vollständige Lösung
Gezählt werden nur kleine „a“: zwei in „Banane“, zwei in „Ananas“ — zusammen 4. Das große „A“ am Anfang von „Ananas“ zählt nicht, weil "A" == "a" False ist. Mit satz.lower() wird es vorher zu „a“, dann sind es 5.
A9
Rückgabewerte weiterverwenden
AFB II

Die Funktion liefert die größere von zwei Zahlen zurück.

def maximum(a, b):    if a > b:        return a    return bx = maximum(3, 8)y = maximum(x, 5) + maximum(-2, -6)print(x, y)

a) Welchen Wert hat x? b) Welchen Wert hat y?

Ansatz: Ersetze jeden Aufruf durch seinen Rückgabewert — von innen nach außen, von links nach rechts.
Rechenweg: maximum(3, 8) = 8; maximum(8, 5) = 8; maximum(−2, −6) = −2.
Lösung: a) 8 b) 6
Vollständige Lösung
Beim ersten Aufruf ist 3 > 8 falsch, also wird b = 8 zurückgegeben. Dann maximum(8, 5) = 8, weil 8 > 5 — das erste return beendet die Funktion sofort. maximum(−2, −6) = −2, denn −2 ist größer als −6. y = 8 + (−2) = 6.
A10
Mix: Das Quiz auswerten
AFB II

Tom tippt nacheinander Paris (mit Leerzeichen am Ende), 21 und Weiss ein.

fragen = ["Hauptstadt von Frankreich?", "3 * 7?", "Farbe von Schnee?"]loesungen = ["paris", "21", "weiß"]punkte = 0for i in range(len(fragen)):    antwort = input(fragen[i] + " ")    if antwort.strip().lower() == loesungen[i]:        punkte = punkte + 1print(punkte, "von", len(fragen))

a) Wie viele Punkte bekommt Tom? b) Wie viele Punkte wären es, wenn in Zeile 6 .strip() fehlen würde?

Ansatz: strip() entfernt Leerzeichen am Rand, lower() macht alles klein. Verglichen wird dann Zeichen für Zeichen.
Rechenweg: "Paris " → "paris" ✓, "21" ✓, "weiss" ist nicht "weiß" ✗. Ohne strip: "paris " ≠ "paris".
Lösung: a) 2 b) 1
Vollständige Lösung
Mit strip() und lower() wird „Paris “ zu „paris“ — richtig. „21“ passt genau. „Weiss“ wird zu „weiss“, die Lösung ist aber „weiß“: Für Python sind das verschiedene Zeichenketten. Also 2 Punkte. Ohne strip() bleibt das Leerzeichen am Ende stehen, „paris “ ≠ „paris“ — dann nur 1 Punkt.