MINT lernen

Zeichenketten verarbeiten

Zwei Sachaufgaben zum Verarbeiten von Zeichenketten mit Hinweisen und Erwartungshorizont.

Dein Fortschritt:
0 / 0 Aufgaben
1

Signaturen in der Schulbibliothek

AFB I–II

In 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")
  1. Gib die Ausgabe des Programms an.
  2. Erkläre, warum in der letzten Zeile int(jahr) steht, und was int(nummer) liefern würde.
  3. 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)
Zähle die Indizes: P ist 0, der erste Bindestrich 3.
Hinweis zu Aufgabe b)
Welchen Typ hat ein Slice eines Strings?
Hinweis zu Aufgabe c)
Schreibe die Indizes unter die Zeichen. Was liefert signatur[-3:] hier?

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.

2

Wörterraten wie beim Galgenmännchen

AFB II–III

Fü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.“

  1. Entwickle das Programm. Groß- und Kleinschreibung soll dabei keine Rolle spielen.
  2. Stelle den Ablauf deines Programms für das Wort „Kanu“ und den Buchstaben „n“ in einer Tracetabelle dar.
  3. Nimm Stellung zu Tims Idee: „Einfacher wäre es, zuerst anzeige = "______" zu setzen und dann bei einem Treffer anzeige[i] = z zu schreiben.“

Hinweise

Hinweis zu Aufgabe a)
Baue die Anzeige in einer Schleife Zeichen für Zeichen neu auf — beginnend mit dem leeren String.
Hinweis zu Aufgabe b)
Eine Zeile pro Schleifendurchlauf, Spalten für z, anzeige und treffer.
Hinweis zu Aufgabe c)
Was weißt du über das Verändern einzelner Zeichen in einem String?

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)
DurchlaufzTreffer?anzeigetreffer
vorher––""0
1Knein"_"0
2anein"__"0
3nja"__n"1
4unein"__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.