Signaturen in der Schulbibliothek
AFB I–IIIn der Schulbibliothek hat jedes Buch eine Signatur aus Fachkürzel, Anschaffungsjahr und laufender Nummer, z. B. „PHY-2021-042“. Die Bibliotheks-AG zerlegt sie mit einem Programm:
signatur = "PHY-2021-042"fach = signatur[:3]jahr = signatur[4:8]nummer = signatur[-3:]print(fach, jahr, nummer)print("Alter:", 2026 - int(jahr), "Jahre")
- Gib die Ausgabe des Programms an.
- Erkläre, warum in der letzten Zeile
int(jahr)steht, und wasint(nummer)liefern würde. - Untersuche, ob das Programm auch für die ältere Signatur „BIO-1998-7“ richtig arbeitet, und schlage eine Verbesserung vor.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
PHY 2021 042 Alter: 5 Jahre
Erwartungshorizont zu Aufgabe b)
Ein Slice eines Strings ist wieder ein String: jahr ist "2021". 2026 − "2021" wäre Zahl minus Text → TypeError. int(jahr) wandelt in die Zahl 2021 um. int(nummer) liefert 42 — die führende 0 verschwindet, weil Zahlen keine führenden Nullen speichern.
Erwartungshorizont zu Aufgabe c)
Fach „BIO“ und Jahr „1998“ stimmen, das Alter (28 Jahre) auch. Aber signatur[-3:] liefert „8-7“, weil die Nummer hier nur eine Stelle hat. Die Nummer beginnt immer an Index 9 (nach dem zweiten Bindestrich), also ist nummer = signatur[9:] für beide Formate richtig.
Wörterraten wie beim Galgenmännchen
AFB II–IIIFür den Spielenachmittag der 5. Klassen soll ein Programm entstehen: Eine Person gibt ein geheimes Wort ein, die andere rät einen Buchstaben. Das Programm zeigt das Wort, wobei nur die geratenen Buchstaben sichtbar sind, und zählt die Treffer. Beispiel: „Banane“ und „a“ ergibt „_a_a__“ und „a kommt 2 Mal vor.“
- Entwickle das Programm. Groß- und Kleinschreibung soll dabei keine Rolle spielen.
- Stelle den Ablauf deines Programms für das Wort „Kanu“ und den Buchstaben „n“ in einer Tracetabelle dar.
- Nimm Stellung zu Tims Idee: „Einfacher wäre es, zuerst
anzeige = "______"zu setzen und dann bei einem Trefferanzeige[i] = zzu schreiben.“
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
wort = input("Geheimes Wort: ")buchstabe = input("Geratener Buchstabe: ")anzeige = ""treffer = 0for z in wort: if z.lower() == buchstabe.lower(): anzeige = anzeige + z treffer = treffer + 1 else: anzeige = anzeige + "_"print(anzeige)print(buchstabe, "kommt", treffer, "Mal vor.")
Mit „Banane“ und „b“ erscheint „B_____“: Das Original-Zeichen wird angezeigt, verglichen wird kleingeschrieben.
Erwartungshorizont zu Aufgabe b)
| Durchlauf | z | Treffer? | anzeige | treffer |
|---|---|---|---|---|
| vorher | – | – | "" | 0 |
| 1 | K | nein | "_" | 0 |
| 2 | a | nein | "__" | 0 |
| 3 | n | ja | "__n" | 1 |
| 4 | u | nein | "__n_" | 1 |
Ausgabe: „__n_“ und „n kommt 1 Mal vor.“
Erwartungshorizont zu Aufgabe c)
Die Idee funktioniert in Python nicht: Strings sind unveränderbar, anzeige[i] = z führt zu einem TypeError. Außerdem müsste die Anzahl der Unterstriche zur Wortlänge passen ("_" * len(wort)). Das Neu-Aufbauen mit anzeige = anzeige + … ist deshalb der richtige Weg; Tims Gedanke (Platzhalter ersetzen) lässt sich mit Listen umsetzen, die veränderbar sind.
