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
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()
| 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.
|
| 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. |
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
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()
| 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. |
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]
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