3.3.1. Suchen

Zeichen in Zeichenketten suchen

In einer Zeichenkette (String) kann es erforderlich sein, ein Zeichen zu suchen.

Dabei kann das Ergebnis der Suche sein, dass das gesuchte Zeichen:

  • in der Zeichenkette enthalten ist
  • nicht in der Zeichenkette enthalten ist

Typisch für das Suchen ist, sobald das Zeichen in der Zeichenkette gefunden wird, ist das Suchen erfolgreich und zu Ende.

  • Unbeachtet bleibt, ob das Zeichen danach nochmals in der Zeichenkette vorkommt.
  • Es ist eine andere Frage, wie viele Mal das Zeichen in der Zeichenkette zu finden ist.
Icon Beschreibung
Exkurs »Zeichenketten«

Variablen können Werte des Datentyps »str« zugewiesen werden. Die Werte werden Zeichenketten (Strings) genannt.

  • Zeichenketten werden in einfache oder doppelte Anführungzeichen gesetzt, wie zum Beispiel 'Python' oder "Python".
  • Ausgaben erfolgen stets als Zeichenketten:
    zahl = 10
    Ausgabe im f-String »f“{xzahl} ist eine Ganzzahl“« → "10 ist eine Ganzzahl"
  • Zeichenketten können miteinander verbinden werden:
    wort1 = "Python
    zeichen = " "
    wort2 = "lernen"
    satz = wort1 + zeichen + wort2 → "Python lernen"
    oder
    satz = " ".join([wort1, wort2]) → "Python lernen" (durch " " wird zwischen die Zeichenketten wort1 und wort2 das Leerzeichen eingefügt)
  • gruss = "Guten Tag!"
    laenge = len(gruss) → 10
    gruss[0] → G
    gruss[1] → u

    gruss[9] → !
    Wichtig: Die indizierung der Zeichen einer Zeichenkette beginnt stets mit 0.
    Die Zeichenkette "Guten Tag!" besteht aus 10 Zeichen mit den Nummern 0 bis 9.
  • Eine Zeichenkette in eine Liste überführen:
    liste = list(gruss) → ['G', 'u', 't', 'e', 'n', ' ', 'T', 'a', 'g', '!']
    liste[0] → G
    liste[1] → u

    liste[9] → !
    Wichtig: Auch die indizierung der Elemente einer Liste beginnt stets mit 0.
    Die Liste ['G', 'u', 't', 'e', 'n', ' ', 'T', 'a', 'g', '!'] besteht aus 10 Elementen mit den Nummern 0 bis 9.
  • Typumwandlung (Type Casting): mit den Funktionen »int()«, »float()«, »list()«, »join()« und »str()«:
    int("256") → Ganzzahl 256
    float("1.5e-2") → Gleitkommazahl 0.015
    list("Python") → Liste ['P', 'y', 't', 'h', 'o', 'n']
    "".join(['P', 'y', 't', 'h', 'o', 'n']) → "Python" (diesmal "" ohne Leerzeichen)
    str(13.7) → die Gleitkommazahl 13.7 wird in die Zeichenkette "13.7" umgewandelt

Programm »zeichensuche,py«

Das Programm besteht aus zwei Teilen:

  • der grafischen Benutzeroberfläche – dem Hauptfenster mit Widgets
  • der Callback-Funktion »suchen«

Zum Suchen von Zeichen in Zeichenketten stellt Python aus dem Modul »re« die Methode »search()« zur Verfügung. Die Methode wird in der Callback-Funktion »suchen« angewandt.

Quelltext des Programms »zeichensuche.py«
import tkinter as tk
import re

# Callback-Funktion
def suchen():
    zeichenkette=entry1.get()
    zeichen=entry2.get()
    if len(zeichen)==1:
        gefunden=re.search(zeichen, zeichenkette)
        if gefunden:
            label3.config(\
                text=f"Das {zeichen} gefunden.")
        else:
            label3.config(\
                text=f"Das {zeichen} nicht gefunden.")
    else:
        label3.config(text="Falsche Eingabe!")
    entry2.delete(0, tk.END) 

# grafische Oberfläche
root = tk.Tk()
root.title("Zeichen in Zeichenkette suchen")
root.geometry("400x320")

# Widgets
label1=tk.Label(root,\
                  text="Gib eine Zeichenkette ein:")
entry1=tk.Entry(root, width=20)
label2=tk.Label(root,\
                  text="Gib das gesuchte Zeichen ein:")
entry2=tk.Entry(root, width=2)
button1=tk.Button(root, text="Suchen",\
                    command=suchen)

label3=tk.Label(root, text="")
button2=tk.Button(root, text="Programm beenden",\
                    command=root.destroy)

label1.pack(pady=10)
entry1.pack(pady=10)
label2.pack(pady=10)
entry2.pack(pady=10)
button1.pack(pady=10)
label3.pack(pady=10)
button2.pack()

root.mainloop()

Erklärungen zum Quelltext
2. Zeile Das Modul »re« wird in das Programm eingebunden.
  • Mit Hilfe der Methode »search« des Moduls »re« kann geprüft werden, ob ein gesuchtes Zeichen in einer Zeichenkette gefunden wird.
5. bis 18. Zeile Die Callback-Funktion »suchen« wird deklariert.
6. Zeile Die Variable »zeichenkette« bekommt die Benutzereingabe als Wert zugewiesen.
7. Zeile Die Variable »zeichen« bekommt die Benutzereingabe als Wert zugewiesen.
8. bis 17. Zeile Geprüft wird, ob der Benutzer genau ein Zeichen eingegeben hat.
9. Zeile Die Methode »search« des Moduls »re« sucht in der Zeichenkette nach dem Zeichen.
10. bis 15. Zeile Das Ergebnis der Suche der Methode »search« wird in f-Strings ausgegeben.
18. Zeile Der Inhalt des zweiten Eingabefensters wird gelöscht.

In der Abbildung 1 und 2 sind Ausgaben des Programms zu sehen.

Bild 56 Bild 57
Abbildung 1 und 2: Ausgaben des Programms
Übung

Aufgabe A24

Implementiere das Programm »zeichensuche.py« am Computer.

Führe das Programm u. a. mit folgenden Eingaben aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht:

  • Zeichen "m"
  • Zeichen "t"
  • Zeichen "b"
  • Zeichen "ik"