Python while循环异常求助:一个正常运行,另一个陷入死循环
问题分析与解决
你的第二个oday循环无法跳出的原因有三个明显错误:
- 变量更新错误:循环内输入新值时,你把输入赋值给了
day变量,但循环判断的是oday,导致oday永远是最初的输入值,不会被更新,循环无法终止。 - 判断条件错误:
int(oday) not in (1,31)这个条件只会检查输入是否是1或31,而不是1到31的范围,即使输入合法日期(比如15)也会被判定为无效。 - 提示文本错误:循环内的输入提示写错了,仍然是请求输入月份,应该改为请求输入日期。
修正后的代码
omonth = int(input('Digite o mês do seu nascimento: ')) while True: if omonth not in range(1, 13): # 用range更准确表示1-12的范围 omonth = int(input('Digite o mês do seu nascimento: ')) else: break oday = int(input('Digite o dia do seu nascimento: ')) while True: if not (1 <= oday <= 31): # 直接用范围判断更直观 oday = int(input('Digite o dia do seu nascimento: ')) else: break
关键修正点说明
- 把循环内的
day = ...改为oday = ...,确保判断的变量能被更新。 - 把判断条件改成
1 <= oday <=31(或oday in range(1,32)),覆盖1到31的所有合法日期值。 - 修正循环内的输入提示文本,和初始输入保持一致。
另外,第一个循环的(1,12)也可以改成range(1,13),这样更准确表示1到12的月份范围,避免只判断1和12的问题。
内容的提问来源于stack exchange,提问作者g10s1
相关产品推荐
相关产品推荐

