2017-12-07 1 views
0

Ich möchte eine "if" -Anweisung zu meinem Code hinzufügen. Wenn "Erraten" keine Ganzzahl ist, drucken Sie ("Sie haben keine Nummer eingegeben, bitte wiederholen Sie die Eingabe") und wiederholen Sie dann den Code aus dem Eingabebereich anstelle des Startpunkts. Das Folgende ist mein Versuch, aber wenn ich einen nicht-int bei der Schätzung eingeben, erscheint ValueError. Danke im Voraus!Wenn Eingabe nicht der spezifische Typ ist, drucken .. (Python)

#This is a guess the number game. 
import random 
print ("Hello, what is your name?") 
name = input() 

print ("Well, " + name + " I am thinking of a number between 1 and 20, please take a guess.") 
secretNumber = random.randint(1,20) 

#Establish that they get 6 tries without specifically telling them 
for guessesTaken in range(1, 7): 
    guess = int(input()) 
    if type(guess) != int: 
     print ("You did not enter a number, please re-enter") 
     continue 


    if guess < secretNumber: 
     print ("The number you guessed was too low") 
    elif guess > secretNumber: 
     print ("The number you guessed was too high") 
    else: 
     break 

if guess == secretNumber: 
    print ("Oh yeah, you got it") 
else: 
    print ("Bad luck, try again next time, the number I am thinking is " + str(secretNumber)) 

print ("You took " + str(guessesTaken) + " guesses.") 
+0

Bitte erarbeiten, wie Sie Ihren Code „nicht bestanden“. –

+0

'guess = int (input())', dann 'if type (rate)! = Int'. Eh? – ForceBru

+0

Nicht schön, aber wie wäre es 'wenn type (rate) == type (5)'? – lkriener

Antwort

1

Verwenden Sie ein try und except:

for guessesTaken in range(1, 7): 
    try: 
     guess = int(input()) 
    except ValueError: 
     print ("You did not enter a number, please re-enter") 
     continue 

Also versuchen Sie die Eingabe in eine Ganzzahl umgewandelt. Wenn dies nicht funktioniert, wirft Python eine ValueError. Sie fangen diesen Fehler und bitten den Benutzer, es erneut zu versuchen.

+0

Vielen Dank für den Vorschlag. Dies führt nicht mehr zu einem Fehler, aber wenn es weiter ausgeführt wird, erlaubt es immer noch nur 6 Versuche (ratesTaken? – Sen

+0

) Ja, die Schleife ist nach sechs Versuchen mit einer falschen Eingabe beendet. –

0

Sie können eine einfache while-Schleife versuchen, die wartet, bis der Benutzer eine Ziffer eingegeben hat. Zum Beispiel

guess = input("Enter a number: ") # type(guess) gives "str" 

while(not guess.isdigit()): # Checks if the string is not a numeric digit 
    guess = input("You did not enter a number. Please re-enter: ") 

Auf diese Weise, wenn die Zeichenfolge sie eingegeben keine Ziffer ist, werden sie eine Aufforderung so oft wie nötig erhalten, bis sie eine ganze Zahl (als String, natürlich) eingeben.

Sie können dann die Ziffer in eine ganze Zahl konvertieren wie zuvor:

guess = int(guess) 

Betrachten wir zum Beispiel die folgenden Fälle:

"a string".isdigit() # returns False 
"3.14159".isdigit() # returns False 
"3".isdigit() # returns True, can use int("3") to get 3 as an integer 
Verwandte Themen