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)?

3voto

Pratik Anand Punkte 687

Versuchen Sie das hier:-

def takeInput(required):
  print 'ooo oder OOO für Beenden'
  ans = raw_input('Eingeben: ')

  if not ans:
      print "Du hast nichts eingegeben...!"
      return takeInput(required) 

      ##  FÜR Beenden  ## 
  elif ans in ['ooo', 'OOO']:
    print "Instanz wird geschlossen."
    exit()

  else:
    if ans.isdigit():
      current = 'int'
    elif set('[~!@#$%^&*()_+{}":/\']+$').intersection(ans):
      current = 'other'
    elif isinstance(ans,basestring):
      current = 'str'        
    else:
      current = 'none'

  if required == current :
    return ans
  else:
    return takeInput(required)

## gib den Wert ein, welchen Typ du möchtest [str/int/Sonderzeichen(als other )]
print "Eingabe: ", takeInput('str')

3voto

Verwenden Sie die "while"-Anweisung, bis der Benutzer einen echten Wert eingibt, und wenn der Eingabewert keine Zahl ist oder ein Nullwert ist, überspringen Sie ihn und versuchen Sie erneut zu fragen usw. Im Beispiel habe ich versucht, Ihre Frage wahrheitsgemäß zu beantworten. Wenn wir annehmen, dass unser Alter zwischen 1 und 150 liegt, wird der Eingabewert akzeptiert, sonst ist es ein falscher Wert. Zum Beenden des Programms kann der Benutzer die Taste 0 verwenden und diese als Wert eingeben.

Hinweis: Lesen Sie die Kommentare über dem Code.

# Wenn Ihr Eingabewert nur eine Zahl ist, verwenden Sie "Value.isdigit() == False".
# Wenn Sie eine Eingabe benötigen, die ein Text ist, sollten Sie "Value.isdigit() == False" entfernen.
def Input(Nachricht):
    Wert = None
    while Wert == None or Wert.isdigit() == False:
        try:        
            Wert = str(input(Nachricht)).strip()
        except Exception:
            Wert = None
    return Wert

# Beispiel:
alter = 0
# Wenn wir annehmen, dass unser Alter zwischen 1 und 150 liegt, wird der Eingabewert akzeptiert,
# sonst ist es ein falscher Wert.
while alter <=0 or alter >150:
    alter = int(Input("Bitte geben Sie Ihr Alter ein: "))
    # Zum Beenden des Programms kann der Benutzer die Taste 0 verwenden und sie als Wert eingeben.
    if alter == 0:
        print("Beende ...")
        exit(0)

if alter >= 18 and alter <=150: 
    print("Sie können in den Vereinigten Staaten wählen!")
else:
    print("Sie können in den Vereinigten Staaten nicht wählen.")

0voto

Ep1c1aN Punkte 683

Sie können immer einfache if-else Logik anwenden und Ihrem Code eine weitere if Logik zusammen mit einer for Schleife hinzufügen.

while True:
     age = int(input("Bitte geben Sie Ihr Alter ein: "))
     if (age >= 18)  : 
         print("Sie können in den Vereinigten Staaten wählen!")
     if (age < 18) & (age > 0):
         print("Sie können in den Vereinigten Staaten nicht wählen.")
     else:
         print("Falsche Zeichen, die Eingabe muss numerisch sein")
         continue

Dies wird eine unendliche Schleife sein und Sie würden aufgefordert, das Alter unendlich einzugeben.

-1voto

Python Punkte 37

Sie können versuchen, es in eine Ganzzahl umzuwandeln, aber bitten Sie den Benutzer, es zu wiederholen, wenn es nicht funktioniert.

while True:
    age = input('Bitte geben Sie Ihr Alter ein: ')
    try:
        age_int = int(age)
        if age_int >= 18:
            print('Sie können in den Vereinigten Staaten wählen!')
        else:
            print('Sie können in den Vereinigten Staaten nicht wählen.')
        break
    except:
        print('Bitte geben Sie eine sinnvolle Antwort ein.')

Die While-Schleife läuft so lange, wie der Benutzer keine sinnvolle Antwort eingegeben hat, bricht jedoch ab, wenn es Sinn macht.

-1voto

Roko C. Buljan Punkte 178158

Anhaltende Benutzereingabe mit rekursiver Funktion:

String

def askName():
    return input("Schreiben Sie Ihren Namen: ").strip() or askName()

name = askName()

Integer

def askAge():
    try: return int(input("Geben Sie Ihr Alter ein: "))
    except ValueError: return askAge()

age = askAge()

Und schließlich die Frageanforderung:

def askAge():
    try: return int(input("Geben Sie Ihr Alter ein: "))
    except ValueError: return askAge()

age = askAge()

responseAge = [
    "Sie können in den Vereinigten Staaten wählen!",
    "Sie können in den Vereinigten Staaten nicht wählen.",
][int(age < 18)]

print(responseAge)

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