757 Stimmen

Den Benutzer um Eingabe bitten, bis er eine gültige Antwort gibt

Ich schreibe ein Programm, das Benutzereingaben akzeptiert.

#Hinweis: Python-2.7-Benutzer sollten `raw_input` verwenden, das Äquivalent zu 3.X's `input`
age = int(input("Bitte geben Sie Ihr Alter ein: "))
if age >= 18: 
    print("Sie können in den Vereinigten Staaten wählen!")
else:
    print("Sie können in den Vereinigten Staaten nicht wählen.")

Das Programm funktioniert wie erwartet, solange der Benutzer sinnvolle Daten eingibt.

Bitte geben Sie Ihr Alter ein: 23
Sie können in den Vereinigten Staaten wählen!

Aber es scheitert, wenn der Benutzer ungültige Daten eingibt:

Bitte geben Sie Ihr Alter ein: dickety six
Traceback (most recent call last):
  File "canyouvote.py", Zeile 1, in 
    age = int(input("Bitte geben Sie Ihr Alter ein: "))
ValueError: ungültige Dezimalzahl für int() zur Basis 10: 'dickety six'

Statt abzustürzen, möchte ich, dass das Programm erneut nach der Eingabe fragt. So:

Bitte geben Sie Ihr Alter ein: dickety six
Entschuldigung, das habe ich nicht verstanden.
Bitte geben Sie Ihr Alter ein: 26
Sie können in den Vereinigten Staaten wählen!

Wie bitte ich um gültige Eingaben anstelle von Absturz oder Akzeptanz ungültiger Werte (z.B. -1)?

-7voto

Liju Punkte 1958

Der folgende Code kann hilfreich sein.

age=(lambda i,f: f(i,f))(input("Bitte geben Sie Ihr Alter ein: "),lambda i,f: i if i.isdigit() else f(input("Bitte geben Sie Ihr Alter ein: "),f))
print("Sie können in den Vereinigten Staaten wählen" if int(age)>=18 else "Sie können in den Vereinigten Staaten nicht wählen",end='')

Wenn Sie maximale Versuche haben möchten, sagen wir 3, verwenden Sie den folgenden Code

age=(lambda i,n,f: f(i,n,f))(input("Bitte geben Sie Ihr Alter ein: "),1,lambda i,n,f: i if i.isdigit() else (None if n==3 else f(input("Bitte geben Sie Ihr Alter ein: "),n+1,f)))
print("Sie können in den Vereinigten Staaten wählen" if age and int(age)>=18 else "Sie können in den Vereinigten Staaten nicht wählen",end='')

Hinweis: Dieser Code verwendet Rekursion.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X