我正在编写一个猜谜游戏程序,用户有机会猜一个1到20之间的数字。
代码有两个问题:
第一仍然是输入验证。 firstGuess
变量实际上位于main()
中。
firstGuess = userguess()
def userGuess():
while True:
try:
guess = int(input('Enter a number between 1 and 20: '))
if 1 <= guess >= 20:
return guess
except ValueError:
print (guess, 'is not a valid guess!')
break
我想做的是将输入验证放入循环中(同时为True :),直到用户给出良好的输入(在这种情况下为1到20之间的正数)。如果用户输入'd'或'-5',则程序应该继续循环,直到给出正确的输入为止。然而,这种情况并非如此。通过调整代码,一旦输入了错误的输入,我便能够再次请求输入,但是如果第三次输入了错误的输入,我会得到“在处理此异常时发生了另一个异常”。
*消除了其他问题,@ Henry Woody是正确的,因为我没有正确使用条件语句。
答案 0 :(得分:0)
问题在于条件。
第一行是
if 1 <= guess >= 20:
userGuess
中的,它正在检查大于或等于20的数字,这不是您想要的数字。您可以通过将条件更改为以下内容来解决此问题:
if 1 <= guess <= 20:
接下来,有条件的:
if guess1 == randomOne or randomTwo or randomThree:
检查guess1 == randomOne
或randomTwo
是否真实,或randomThree
是否真实。它不会检查guess1 == randomOne
或guess1 == randomTwo
或guess1 == randomThree
是否符合预期。您可以通过将条件更改为以下内容来解决此问题:
if guess1 in [randomOne, randomTwo, randomThree]:
检查guess1
是否等于三个随机变量之一。
编辑:
try
/ except
块中还有一个问题。如果用户在input
中输入非数字字符,则会在定义ValueError
之前引发guess
。但是随后在guess
块中引用了except
,但此时尚未定义guess
。
您可以通过获取用户输入,然后分别尝试将输入转换为int
来解决此问题。
这是一个例子:
while True:
guess = input('Enter a number between 1 and 20: ')
try:
guess = int(guess)
if 1 <= guess <= 20:
return guess
except ValueError:
print (guess, 'is not a valid guess!')
break