Python中While循环else分支无法执行的问题求助
问题原因及修正方案
核心问题1:错误的条件判断语法
你写的if {question == '2022'}是创建了一个集合,而非进行布尔判断。Python里非空集合会被当作True处理,所以这个if条件永远为真,else分支自然永远不会执行。正确写法应该去掉大括号,直接写if question == 2022:(注意2022是整数,不是字符串,因为你已经把输入转成int类型)。
核心问题2:类型不匹配
question是通过int(input(...))转换得到的整数类型,你却和字符串'2022'比较,整数与字符串永远不会相等,所以即使去掉大括号,question == '2022'的结果也是False——但原来的大括号问题掩盖了这个问题。
额外问题:循环逻辑错误
你的代码不管输入正确、错误,甚至捕获异常后都会立刻break,导致循环只运行一次,用户输入错误后无法重新尝试,不符合常规问答逻辑。
修正后的代码
while True: try: question = int(input("What year was the highest year of recorded cases?")) except ValueError: # 只捕获输入无法转成整数的异常,不要捕获所有异常 print("Error. Number required.") continue # 异常后回到循环开头,让用户重新输入 if question == 2022: # 直接用布尔判断,且和整数2022比较 print("Correct answer.") break # 答对后退出循环 else: print("Incorrect answer. Try again.") # 答错提示并继续循环
关键修改点
- 移除if条件里的大括号,直接使用
question == 2022进行判断 - 将比较目标从字符串
'2022'改为整数2022,和question类型保持一致 - 异常捕获改为具体的
ValueError,避免捕获无关异常 - 异常处理后用
continue代替break,让用户可以重新输入 - 答错后不直接
break,让循环继续直到用户答对
内容的提问来源于stack exchange,提问作者Sheri Milan
相关产品推荐
相关产品推荐

