Anwender soll zwingend richtige Eingabe machen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Wallower
User
Beiträge: 13
Registriert: Montag 17. Oktober 2022, 13:12

Guten Morgen!

In meinem Programm kann sich der Anwender durch Eingabe einer Zahl zwischen mehreren Versuchsgruppen entscheiden:

Code: Alles auswählen

Nr. Gruppe
0   'A'
1   'B'
...  ...
Das Programm soll also eine richtige Eingabe einfordern (für die Variable "gruppen_index"). Die Zahl der Gruppen hängt von der importierten Datei ab, z.B. 'A' bis 'G". Nach Stunden(!) scheint folgender Programmschnipsel zu funktionieren, kommt mir aber umständlich vor:

Code: Alles auswählen

for i, elt in enumerate(gruppen):
    print(i, "   '", gruppen[i], "'", sep="")
    
while True:
    try:
        gruppen_index = int(input("Nr. der Gruppe: "))
        if gruppen_index not in range(len(gruppen)):
            print("Zahl zwischen 0 und", len(gruppen)-1, "eingeben.")
            continue
        else:
            break
    except ValueError:
        print("Zahl zwischen 0 und", len(gruppen)-1, "eingeben.")
Freue mich über Verbesserungsvorschläge! : )
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

`elt` verwendest Du gar nicht. Für komplexere Ausgaben benutzt man Formatstrings.
Üblich ist es, Gruppen ab 1 zu nummerieren, nur Programmiererinnen denken 0-Indiziert.
Das continue ist unnötig. Codewiederholungen versucht man zu vermeiden

Code: Alles auswählen

for i, gruppe in enumerate(gruppen):
    print(f"{i} '{gruppe}'")
while True:
    try:
        gruppen_index = int(input("Nr. der Gruppe: "))
        if 1 <= gruppen_index <= len(gruppen):
            break
    except ValueError:
        Pass
    print(f"Zahl zwischen 1 und {len(gruppen)} eingeben.")
Wallower
User
Beiträge: 13
Registriert: Montag 17. Oktober 2022, 13:12

Vielen lieben Dank! Das funktioniert wunderbar und danke auch für deine weitergehenden Erläuterungen!
Antworten