While 循环未完全执行并且无法找出原因

问题描述 投票:0回答:3

我正在开发一个Python项目,但我对Python还是很陌生。我写了以下代码:

while True:
    try:
        question = int(input("What year was the highest year of recorded cases?"))
    except:
        print("Error. Number required.")
        break
    if {question == '2022'}:
        print("Correct answer.")
        break
    else:
        print("Incorrect answer.")
        break

但是 else 语句没有执行,我不知道为什么。有人有想法吗?代码的其余部分似乎工作没有问题,只是 else 语句部分。

我尝试重新编写它,以防止格式设置已关闭,并且我尝试添加 continue 或finally 子句,但这只是生成了语法错误。

python while-loop
3个回答
1
投票

我将补充 Sreeram 所说的内容,并提到您还将输入转换为数字,然后将其与 if 语句中的字符串进行比较。如果删除“2002”周围的引号,则会将输入和 2022 作为数字进行比较。

print(2022 == '2022')   # Prints False
print(2022 == 2022)     # Prints True

1
投票

您的代码中似乎存在一些问题。让我们来看看它们:

except 块捕获任何异常,但您只想捕获与将输入转换为整数相关的异常。您应该指定要捕获的异常,在本例中为 ValueError。

if语句中的条件不正确。您不需要将条件括起来,并且应该将输入的值直接与整数 2022 进行比较,而不是字符串“2022”。

if 和 else 块中的break语句在任何情况下都会导致循环退出。您可能希望从 else 块中删除 break 语句,以允许循环继续,直到提供正确的答案。

这是更正后的代码:

while True:
try:
    question = int(input("What year was the highest year of recorded cases? "))
except ValueError:
    print("Error. Number required.")
    continue  # Continue the loop if an exception occurs
if question == 2022:
    print("Correct answer.")
    break
else:
    print("Incorrect answer.")

通过这些更改,程序应该可以按预期运行。它会不断提示用户输入,直到输入有效的整数,并且它会正确检查输入的年份是否为 2022 年。


0
投票

如果你的 except 块没有捕获任何错误,那么包含 else 块会更Pythonic。在该 else 块中,您可以添加 if-else 块。此外,您直接将用户输入转换为 int,然后在 if 语句中将其用作字符串。另外,不需要花括号。

我已经修复了你的代码并且可以工作:

while True:
    try:
        question = int(input("What year was the highest year of recorded cases? "))
    except ValueError:
        print("Error. Number required.")
        break
    else:
        if question == 2022:
            print("Correct answer.")
            break
        else:
            print("Incorrect answer.")
            break
© www.soinside.com 2019 - 2024. All rights reserved.