Python:带输入验证的随机数游戏

Python: random number game with input validation

我正在编写一个猜谜游戏程序,用户有机会猜出1到20之间的数字。

代码有两个问题:

第一名仍然是输入验证。 firstGuess变量实际上在main()中。

1
2
3
4
5
6
7
8
9
10
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',程序应继续循环,直到给出良好的输入。 然而,这种情况并非如此。 通过调整代码,一旦输入输入错误,我就可以再次询问输入,但如果第三次输入错误,我会收到"处理此异常时发生的另一个异常"。

*删除了其他问题,@亨利伍迪是正确的,因为我没有正确使用条件。


问题与条件有关。

第一个是线:

1
if 1 <= guess >= 20:

userGuess中,检查大于或等于20的数字,这不是你想要的。 您可以通过将条件更改为:

1
if 1 <= guess <= 20:

接下来,条件:

1
if guess1 == randomOne or randomTwo or randomThree:

检查guess1 == randomOnerandomTwo是否真实或randomThree是否真实。 它不会按预期检查guess1 == randomOneguess1 == randomTwoguess1 == randomThree。 您可以通过将条件更改为:

1
if guess1 in [randomOne, randomTwo, randomThree]:

检查guess1是否等于三个随机变量中的任何一个。

编辑:

try / except块中也存在问题。 如果用户在input中输入非数字字符,则在定义guess之前将引发ValueError。 但是except块中引用guess,但此时未定义guess

您可以通过获取用户输入来解决此问题,然后单独尝试将输入转换为int

这是一个例子:

1
2
3
4
5
6
7
8
9
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