3.3.2 Sortieren

Zunächst soll es aber erst einmal darum gehen, in einem Programm eine Liste einzugeben.

Programm »liste.py«

Das Programm leistet das Folgende:

  • mit Hilfe der Callback-Funktion »eingeben« wird eine Liste von Ganzzahlen eingegeben
Quelltext des Programms »liste.py«
import tkinter as tk

liste=[]

# Callback-Funktion
def eingeben():
	global liste
    try:
        zahl=int(entry.get())
        liste.append(zahl)
        entry.delete(0, tk.END)
        label2.config(text=f"Liste: {liste}")
    except ValueError:
        label2.config(text="Falsche Eingabe!")

# grafische Bnutzeroberfläche    
root = tk.Tk()
root.title("Eingabe einer Liste")
root.geometry("400x240")
root.resizable(False, False)

# Widgets
label1=tk.Label(root, text="Ganzzahl eingeben:")
entry=tk.Entry(root, width=5)
button1=tk.Button(root,\
                  text="Ganzzahl in die Liste einfügen",\
                  command=eingeben)
label2=tk.Label(root, text="")
button2=tk.Button(root, text="Programm beenden",\
                  command=root.destroy)

label1.pack(pady=10)
entry.pack(pady=10)
button1.pack(pady=10)
label2.pack(pady=10)
button2.pack()

root.mainloop()

Erklärungen zum Quelltext
3. Zeile Der globale Variable »liste« wird die leere Liste [] als Wert zugewiesen.
6. bis 14. Zeile Die Callback-Funktion »eingeben« wird deklariert.
7. Zeile Die globale Variable »liste« wird in die Callback-Funktion »eingeben« eingebunden.
8. bis 14. Zeile Die »,try« und »except« Ausnahmebehandlung der Eingaben erfolgt.
9. Zeile Der Variable »zahl« wird die eingegebene Zeichenfolge als Ganzzahl zugewiesen.
  • Zu beachten ist, dass Eingaben stets Zeichenfolgen sind.
10. Zeile Der Wert der Variable »zahl« wird nach jeder Eingabe als Element (Ganzzahl) in die Liste eingefügt.
11. Zeile Das Eingabefenster wird geleert.
12. Zeile Die Liste wird in einem f-String als Zeichenkette ausgegeben.
Übung

Aufgabe A27

Implementiere das Programm »liste.py« am Computer.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht:

  • füge dazu die Ganzzahlen 12, 8, -120, 34, -2, 0, 98, -235, -4 und 54 in eine Liste ein

Sortieren der Elemente einer Liste

Neben dem Suchen in einer Liste ist das Sortieren der Elemente einer Liste oft erforderlich.

Sind die Elemente der Liste Zahlen (Ganzzahlen oder Gleitkommazahlen), können die Zahlen aufsteigend oder absteigend sortiert werden.

  • [5, -2, 13, 0, 9] → [-2, 0, 5, 9, 13]
  • [5, -2, 13, 0, 9] → [13, 9, 5, 0, -2]

Sind die Elemente der Liste Buchstaben, können die Buchstaben alphabetisch sortiert werden.

  • ["h", "a", "u", "s"] → ["a", "h", "s", "u"]

Sind die Elemente der Liste Wörter, können die Wörter lexikographisch sortiert werden.

  • ["rot", "grün", "blau"] → ["blau", "grün", "rot"]

Zum Sortieren der Elemente einer Liste gibt es In Python die Methode »sort«.[1] Die eingegebene unsortierte Liste »liste« wird mit Hilfe von:

  • »liste.sort()« in die aufsteigend sortierte Liste »liste« überführt
  • »liste.sort(reverse=True)« in die absteigend sortierte Liste »liste« überführt

Programm »zahlensort.py«

Das Programm besteht aus drei Teilen:

  • der Callback-Funktion »eingeben«
  • der Callback-Funktion »sortieren«
  • der grafischen Benutzeroberfläche – dem Hauptfenster

Das Programm leistet das Folgende:

  • mit Hilfe der Callback-Funktion »eingeben« wird eine Liste von Ganzzahlen eingegeben
  • die Callback-Funktion »sortieren« sortiert die Liste von Ganzzahlen aufsteigend
Quelltext des Programms »zahlensort.py«
import tkinter as tk

liste=[]

# Callback-Funktion
def eingeben():
    global liste
    try:
        zahl=int(entry.get())
        liste.append(zahl)
        entry.delete(0, tk.END)
        label2.config(text=f"Liste: {liste}")
    except ValueError:
        label2.config(text="Falsche Eingabe!")

# Callback-Funktion
def sortieren():
    global liste
    liste.sort()
    label3.config(text=f"Sortierte Liste: {liste}")
    button1.configure(state=tk.DISABLED)    
    button2.configure(state=tk.DISABLED)

# grafische Benutzeroberfläche   
root = tk.Tk()
root.title("Sortieren einer Liste")
root.geometry("400x320")
root.resizable(False, False)

# Widget
label1=tk.Label(root, text="Ganzzahl eingeben:")
entry=tk.Entry(root, width=5)
button1=tk.Button(root,\
                  text="Ganzzahl in die Liste einfügen",\
                  command=eingeben)
label2=tk.Label(root, text="")
label3=tk.Label(root, text="")
button2=tk.Button(root, text="Liste aufsteigend sortieren",\
                  command=sortieren)
button3=tk.Button(root, text="Programm beenden",\
                  command=root.destroy)

label1.pack(pady=10)
entry.pack(pady=10)
button1.pack(pady=10)
label2.pack(pady=10)
button2.pack(pady=10)
label3.pack(pady=10)
button3.pack()

root.mainloop()

Erklärungen zum Quelltext
17. bis 22. Zeile Die Callback-Funktion »sortieren« wird deklariert.
19. Zeile Die Elemente (Ganzahlen) der Liste werden mit der Methode »sort« aufsteigend sortiert.
21. und 22. Zeile Die beiden Button »Ganzzahl in die Liste einfügen« und »Liste aufsteigend sortieren« werden deaktiviert.
20. Zeile Die sortierte Liste wird in einem f-String als Zeichenkette ausgegeben.
Übung

Aufgabe A28

Implementiere das Programm »zahlensort.py« am Computer.

Führe das Programm aus:

  • füge dazu die Ganzzahlen 12, 8, -120, 34, -2, 0, 98, -235, -4 und 54 als Elemente in die Liste ein
  • danach sollen die Elemente (Ganzzahlen) der Liste aufsteigend sortiert werden

Ändere das Programm, sodass mit der Python-Metode »liste.sort(reverse=True)« die Elemente (Ganzzahlen) der Liste absteigend sortiert werden.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.


  1. [1] Neben der Methode »sort« gibt es in Python noch die Methode »sorted« zum Sortieren der Elemente einer Liste. Die eingegebene unsortierte Liste »liste1« wird mit Hilfe von:
    • »liste2=sorted(liste1)« in die aufsteigend sortierte Liste »liste2« überführt
    • »liste2=sorted(liste1, reverse=True)« in die absteigend sortierte Liste »liste2« überführt