我正在尝试构建一个简单的游戏,我希望Python在玩家输入负数时返回一条消息。我的问题是,当玩家试图输入负数时,负数被解释为字符串。
下面是我的脚本:
while True:
user_guess = input("Guess a number: ")
if user_guess.isdigit():
user_guess = int(user_guess)
if user_guess < 0:
print("Too low, guess a number between 0 and 10.")
if user_guess > 10:
print("Too high, guess a number between 0 and 10.")
else:
print("It is not a number.")
break
5条答案
按热度按时间yfjy0ee71#
你写的代码并没有 * 错误 *,但是它在Python中不是很符合习惯,因此你不得不与语言斗争来添加“parse negative”功能。考虑一下你可以写这样的代码:
然而,如果你只写惯用的Python,这会更容易!你的代码是用一种被亲切地称为LBYL(三思而后行)的风格编写的,代码检查是为了确保一件事在做之前可以完成。Python更喜欢EAFP(比请求许可更容易请求原谅),它让你尝试做一件事,并在抛出错误时捕捉错误。
然后,惯用代码只尝试将输入转换为int,如果失败,则会引起注意。
llmtgqce2#
对于负数,它返回“It is not a number”的原因是因为
user_guess.isdigit()
将负数视为字符串(或非数字)。下面是一段代码,可以按您的预期工作:
由于
int()
函数可以识别负数,因此使用try-except
可以帮助您捕获ValueError
异常,该异常在您尝试对非整数使用int()
函数时引发。xpcnnkqh3#
isdigit()有问题。如果是减号,isdigit()将返回False。一个解决方法是让int()验证user_guess。
kcugc4gi4#
shstlldc5#
编辑:我将解释我的代码以及为什么它能解决你的问题。你使用的isdigit方法只会检查字符串中的字符是否由数字组成。减号不是数字,所以它返回False。
相反,我尝试将字符串转换为数字,如果python失败,我就再次循环(继续)并要求输入一个新的数字。如果输入确实是一个数字,代码的下半部分会检查有效的区间。只有当数字在区间内时,控制循环的变量才会被设置,循环退出。
我的代码不依赖于isdigit,因此避免了您的问题。希望这有帮助,并提供洞察力。