为何闰年判断程序的while循环无法正常终止?输入校验异常求助
闰年判断程序的两处异常修复
问题1:初始输入不合法后,后续正确输入仍无法退出循环
核心原因有两个:
- 每次重新输入
year后,未更新用于校验的pear变量,循环始终基于初始的pear值判断,导致正确输入无法被识别 - 代码中所有
valid == True都是相等比较操作,不是赋值,这会让valid始终保持False,循环无法终止
问题2:校验通过后逻辑错误(含崩溃风险)
原代码用index("0")和rindex("0")判断整百年的逻辑完全错误:
- 若年份不含0(比如1996),
sem.index("0")会直接抛出异常,导致程序崩溃 - 整百年的判断逻辑不符合闰年规则,会出现误判
修正后的完整代码
print("Did you know that the last leap year was in 2020?") print("To find out if a year is a leap year, use this program") valid = False while not valid: year = input("Please enter a year\n") pear = str(year) # 存在性检查 if pear == "": print("Error. Please enter a year - it should be 4 digits long.") # 类型检查 elif not pear.isnumeric(): print("Error. Please enter a year - it should be 4 digits long.") # 长度检查 elif len(pear) != 4: print("Error. Please enter a year - it should be 4 digits long.") else: year_int = int(year) # 标准闰年规则:能被4整除但不能被100整除,或者能被400整除 if (year_int % 4 == 0 and year_int % 100 != 0) or (year_int % 400 == 0): print(f"{year_int} is a leap year") else: print(f"{year_int} is not a leap year") # 赋值标记校验通过,终止循环 valid = True print("Nice")
关键修复说明
- 将输入操作移到循环内部,每次循环重新获取输入并更新
pear,确保校验基于最新输入 - 把
valid == True改为valid = True,完成赋值操作,让循环能正常退出 - 替换错误的闰年判断逻辑,使用行业标准规则,避免异常和误判
- 用
elif替代嵌套if,简化代码结构,提升可读性
内容的提问来源于stack exchange,提问作者Azalea-Delphinium
相关产品推荐
相关产品推荐

