2017-11-12 9 views
-3

Ich habe vor einer Woche angefangen, Python zu lernen, und für eines meiner ersten Projekte habe ich ein wirklich einfaches Zufallszahlen-Ratespiel als Teil des Kurses erstellt, in dem ich bin. Ich habe jedoch versucht, meinem Code eine Erweiterung hinzuzufügen würde etwas anderes ausgeben, wenn das Wort "nein" als Eingabe eingegeben wurde, obwohl die Eingabe nur ganze Zahlen in meinem Code akzeptiert. In einer früheren Frage, habe ich gelernt, dass try/except verwendet werden könnte, etwas, wenn ein Fehler aufgetreten ist, (wie zum Beispiel durch Eingabe von „nein“ statt einer ganze Zahl) gemäß folgenden Vorlage zu drucken:Wie lassen sich Integer und Strings in der Eingabe zulassen?

enter image description here

In drehen, sieht mein Code wie folgt aus:

enter image description here

und die Ausgabe erhalte ich, wenn ich fahre nicht sieht wie folgt aus:

eine Zahl zwischen 1 eingeben und 21: nein

Traceback (most recent call last): 
    File "C:/Users/camer/Desktop/Python/randomintproject.py", line 3, in <module> 
    guess = int(input("Enter a number between 1 and 21: ")) 
ValueError: invalid literal for int() with base 10: 'no' 

Wenn der Vorlagencode funktioniert, was mache ich dann falsch?

+2

Postleitzahl als Text, nicht als Bild. – Daniel

+0

Sie führen die Konvertierung außerhalb von try/except durch, damit sie nicht gefangen wird. – jonatan

+0

Bitte markieren Sie meine Antwort als korrekt, wenn es für Sie funktioniert. Auch andere Benutzer haben darauf hingewiesen, dass Sie keine Bilder von Ihrem Code machen: Fügen Sie ihn stattdessen als Text in die Frage ein. – alexisdevarennes

Antwort

1

Sie versuchen, alle Eingänge zu int konvertieren von input() mit int()

Versuchen Sie, diese Verpackung:

würde
inp = input('enter a number...') 

if inp.isnumeric(): # checks if input is numeric, i.e. 2, 39, 4592 etc 
    inp = int(inp) 
else: # Was not numeric, i.e. was a letter, word or some character 
    print "OK forget it" 

Ein anderer Weg sein:

inp = input('enter a number...') 
    try: # checks if input is numeric, i.e. 2, 39, 4592 etc 
     inp = int(inp) 
    except(ValueError): # Was not numeric, i.e. was a letter, word or some 
character 
     try: 
      inp = float(inp) # Let's try again, could be user entered 3.5 or some other float value. 
     except(ValueError): 
      print("OK forget it") 

Dies würde die Fälle abdecken @schwobaseggl erwähnt in den Kommentaren dieser Frage.

Bitte nehmen Sie keine Bilder von Ihrem Code auf, sondern fügen Sie ihn hier ein.

+2

Trotz seines irreführenden Namens wird 'isnumeric' nicht' True' für Eingaben wie '-3'' oder' '3.5'' zurückgeben. – schwobaseggl

+0

Richtig, aber Benutzer braucht eine Zahl und ein int zwischen 1 und 21. – alexisdevarennes

+0

Richtig, nur eine bemerkenswerte Bemerkung;) – schwobaseggl

0

Ihr Code:

random n = random.randint(1,21) 
guess = int(input("Enter a number between 1 and 21: ")) 
try: 
    while guess != n: 
     print ("WRONG!") 
     guess = int(input("Enter a number between 1 and 24: ")) 
     if guess == n: 
     print ("RIGHT!") 
except ValueError: 
    if guess == "no": 
     print ("OK forget it") 
    else: 
     print ("no idea what you want") 

`` `

Das Problem hier ist die erste guess = int(input("Enter a number between 1 and 24: ")) vor der try Klausel ist und daher von ihr nicht abgedeckt ist und daher, wenn es Fehler nicht aufgefangen wird . Einfach diese Linie entfernen und es wird gut funktionieren!

P.S Ich habe gerade festgestellt, dass auf diese Weise jedes Mal, wenn Sie das Programm ausführen, "FALSCH!" bevor du anfängst. Die einfachste Lösung ist, einen booleschen Wert first hinzuzufügen, und wenn es true ist, drucken Sie nicht "WRONG!", Und stellen Sie es nach der ersten Iteration auf false. Alternativ (aber hässlicher meiner Meinung nach), erstellen Sie eine zweite Ausnahme-Klausel für die erste Eingabe

Verwandte Themen