ValueError: int() 以 10 为底的无效文字:'stop'
Posted
技术标签:
【中文标题】ValueError: int() 以 10 为底的无效文字:\'stop\'【英文标题】:ValueError: invalid literal for int() with base 10: 'stop'ValueError: int() 以 10 为底的无效文字:'stop' 【发布时间】:2013-05-20 11:53:31 【问题描述】:每次我尝试编写代码时它都可以工作,但是当我输入 'stop'
时它给我一个错误:
ValueError: int() 以 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
【问题讨论】:
【参考方案1】:您正在尝试将字符串“stop”转换为整数。该字符串没有有效的整数表示,因此您会收到该错误。你应该把
if str(guess) == 'stop' or str(guess) == 'Stop':
break
作为第一次检查
另一个建议是在输入中使用小写字母,然后检查小写字母“stop”。这样,您只需检查一次,它就会捕获“停止”、“停止”、“停止”等。
if str(guess).lower() == 'stop':
break
【讨论】:
(不是你的代码中的错误,只是一个建议)而不是检查小写和驼峰大小写,为什么不将字符串转换为小写/大写(因为我假设你不关心大小写灵敏度)?然后它会捕捉到以下任何一个:'stop'、'Stop'、'STOP'等你明白了if str.lower(guess) == 'stop'
@pablo:Python 中没有“演员表”之类的东西。 int
是一个类型(一个类),int(somestring)
实例化了一个新的 int。【参考方案2】:
传递给int()
的字符串应该只包含数字:
>>> 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'
快速解决方法是在此处使用exception handling:
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()
您可以使用guess.lower() == 'stop'
匹配“stop”的任何大小写组合:
>>> "Stop".lower() == "stop"
True
>>> "SToP".lower() == "stop"
True
>>> "sTOp".lower() == "stop"
True
【讨论】:
根据 Andenthal 对其他答案的评论,您可以使用if guess.lower() == 'stop'
并捕捉所有“停止”大写的可能性。
FWIW,一次就够了,最好不要调用int
3次,尽量缩短try块。
为了记录,传递给int()
的字符串可能包含前导和尾随空格以及数字。【参考方案3】:
这是一个更 Pythonic (Python 3) 的版本。
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)
【讨论】:
以上是关于ValueError: int() 以 10 为底的无效文字:'stop'的主要内容,如果未能解决你的问题,请参考以下文章
ValueError: int() 以 10 为底的无效文字:'10025.0'
ValueError:int() 的无效文字,以 10 为底错误
ValueError: int() 以 10 为底的无效文字:'196.41'
用户输入给出“ValueError:int() 以 10 为底的无效文字:”