Python:具有输入验证功能的随机数游戏

时间:2018-10-28 18:32:18

标签: python python-3.x

我正在编写一个猜谜游戏程序,用户有机会猜一个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是正确的,因为我没有正确使用条件语句。

1 个答案:

答案 0 :(得分:0)

问题在于条件。

第一行是

if 1 <= guess >= 20:
userGuess中的

,它正在检查大于或等于20的数字,这不是您想要的数字。您可以通过将条件更改为以下内容来解决此问题:

if 1 <= guess <= 20:

接下来,有条件的:

if guess1 == randomOne or randomTwo or randomThree:

检查guess1 == randomOnerandomTwo是否真实,或randomThree是否真实。它不会检查guess1 == randomOneguess1 == randomTwoguess1 == 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