首页 > 解决方案 > Python While 循环使用 try-catch 语句给出意外结果

问题描述

我是一个蟒蛇菜鸟,希望有人能在这里为我指明正确的方向。

我正在尝试获取用户输入并且只接受大写和小写字母。

如果输入了其他任何内容,那么我想再次询问用户是否输入有效信息(一封信)。

我的代码有效(在一定程度上)-如果输入了正确的值,它会按预期工作,但是如果输入了无效值,它会再次询问问题,但现在即使输入了有效值,它也需要输入与那里一样多次的值是错误的答案。

我知道可能有更好的方法来做我想做的事(我在下面有一个不同的工作解决方案,但我的好奇心是为什么这个脚本会这样)

import string

def get_guess():
    lower_letters = list(string.ascii_lowercase)
    while True:
        try:
            guess = input('Guess a letter: ')
            if guess.lower() in lower_letters:
                return guess
            else:
                get_guess()
        except:
            print("That's not a valid option!")

letter = get_guess()
print(letter)

为了帮助解释这里是实际的代码: 运行代码的 Gif

我知道我可以用下面的代码替换该代码并得到我想要的结果,但是你能解释一下为什么顶级代码正在做它是什么 - 如果这是一个明显的菜鸟问题,我就是不能放手。

工作代码:

import re
while 1:
    inputString = input()
    if re.match(r"^[A-Z,a-z]$", inputString):
        print("Input accepted")
        break
    else:
        print("Bad input, please try again")

如果有更好的方法来获得相同的结果,而不是我提供的 2 个片段,也请随时向我指出任何其他资源 - 我总是愿意学习。

谢谢大家。

标签: pythonpython-3.xrecursionwhile-looptry-catch

解决方案


推荐阅读