2016-08-09 45 views
1

Dies ist also eine Eingabeaufforderung für Benutzereingaben, und es funktioniert gut. Ich habe einige Namen und zugehörige (1 basierte) Nummern auf der Konsole gedruckt, damit der Benutzer einen auswählen kann. Ich gebe auch die Option zum Beenden durch Eingabe von q. Die Bedingung für die Nummer gültig zu sein, ist a) es eine Zahl ist und b) es ist kleiner oder gleich der Anzahl von Namen und größer als 0.Wie kann man den Benutzer sauber nach Eingabe fragen und verschiedene Arten zulassen?

while True:  
    number = str(input("Enter number, or q to quit. \n")) 
    if number == "q": 
     sys.exit() 
    try: 
     number = int(number) 
    except: 
     continue 
    if number <= len(list_of_names) and number > 0: 
     name = list_of_names[number-1] 
     break 

Es gibt kein Problem mit diesem Code, mit Ausnahme Ich finde es schwer zu lesen und nicht sehr schön. Da ich neu bei Python bin, möchte ich euch fragen, wie würdest du diese Aufforderung sauberer codieren? Um genauer zu sein: Wie frage ich den Benutzer nach Eingabe, die entweder eine Zeichenkette oder eine ganze Zahl sein kann?

+0

Neben dem Einrücken, sieht ok. Du könntest 'else' und' finally' oder multiple 'except's verwenden. Auch, wenn Nummer in Bereich (..) '. Und t denke, dass die Eingabe bereits eine Zeichenfolge zurückgibt. – handle

+0

'if number.isdigit() und int (number) im Bereich (len (list_of_names)):' –

+0

@StevenRumbalski Das hilft nicht wirklich, denn dann musst du die Eingabe in ein int _again_ konvertieren, wenn du die Liste indizierst, und auch die Nummer ist 1-basiert. –

Antwort

1

Ein bisschen einfacher:

while True:  
    choice = str(input("Enter number, or q to quit. \n")) 
    if choice.lower() == "q": 
     sys.exit() 
    elif choice.isdigit() and (0 < int(choice) <= len(list_of_names)): 
     name = list_of_names[int(choice)-1] 
     break 
+0

So funktioniert das. Sie vermeiden den Versuch/ausgenommen Teil, ich mag das. :) – suffi

1

Einfach herunterlassen.

number = str(input("Enter number, or q to quit. \n")) 
number = number.lower() 

Das wird der q Kleinbuchstaben machen, so dass es, wenn sie mit Shift drücken es spielt keine Rolle, ob sie etwas drücken sonst nur eine if-Anweisung machen, die eine while-Schleife true setzt.

Verwandte Themen