Every time I try me code it works but when I type in 'stop' it gives me an error:
ValueError: invalid literal for int() with base 10: ‘stop’
def guessingGame():
global randomNum
guessTry = 3
while True:
guess = input('Guess a Number between 1 - 10, You have 3 Tries, or Enter Stop: ')
if int(guess) == randomNum:
print('Correct')
break
if int(guess) < randomNum:
print('Too Low')
guessTry = guessTry - 1
print('You have, ' + str(guessTry) + ' Guesses Left')
if int(guess) > randomNum:
print('Too High')
guessTry = guessTry - 1
print('You have, ' + str(guessTry) + ' Guesses Left')
if guessTry == 0:
print('You have no more tries')
return
if str(guess) == 'stop' or str(guess) == 'Stop':
break
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
The string passed to int() should only contain digits:
>>> int("stop")
Traceback (most recent call last):
File "<ipython-input-114-e5503af2dc1c>", line 1, in <module>
int("stop")
ValueError: invalid literal for int() with base 10: 'stop'
A quick fix will be to use exception handling here:
def guessingGame():
global randomNum
global userScore
guessTry = 3
while True:
guess = input('Guess a Number between 1 - 10, You have 3 Tries, or Enter Stop: ')
try:
if int(guess) == randomNum:
print('Correct')
break
if int(guess) < randomNum:
print('Too Low')
guessTry = guessTry - 1
print('You have, ' + str(guessTry) + ' Guesses Left')
if int(guess) > randomNum:
print('Too High')
guessTry = guessTry - 1
print('You have, ' + str(guessTry) + ' Guesses Left')
if guessTry == 0:
print('You have no more tries')
return
except ValueError:
#no need of str() here
if guess.lower() == 'stop':
break
guessingGame()
And you can use guess.lower() == 'stop' to match any uppercase-lowercase combination of “stop”:
>>> "Stop".lower() == "stop" True >>> "SToP".lower() == "stop" True >>> "sTOp".lower() == "stop" True
Method 2
Here’s a more pythonic (Python 3) version.
def guessing_game(random_num):
tries = 3
print("Guess a number between 1 - 10, you have 3 tries, or type 'stop' to quit")
while True:
guess = input("Your number: ")
try:
guess = int(guess)
except (TypeError, ValueError):
if guess.lower() == 'stop' :
return
else:
print("Invalid value '%s'" % guess)
continue
if guess == random_num:
print('Correct')
return
elif guess < random_num:
print('Too low')
else:
print('Too high')
tries -= 1
if tries == 0:
print('You have no more tries')
return
print('You have %s guesses left' % tries)
Method 3
You are trying to convert the string “stop” to an integer. That string has no valid representation as an integer, so you get that error. You should put
if str(guess) == 'stop' or str(guess) == 'Stop': break
as the first check
Another suggestion is to use lowercase on the input and then check for the lowercase ‘stop’. That way you will have to check just once and it will capture either ‘Stop’, ‘STOP’, ‘sTOp’, etc..
if str(guess).lower() == 'stop': break
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0