骆驼在西部 发表于 2025-4-4 16:04:48

代码不能执行的问题所在,求指教

year = input('请输入一个年份:')

while not year.isdigit():
    year = int( input("抱歉,您的输入有误,请输入一个整数:"))
   
    if year % 400 == 0:
      print(year,'是闰年')
    else:
      if year % 4 == 0 and year % 100 != 0 :   
            print(year,'是闰年')
      else:
            print(year,'不是闰年')

只能执行第一句,输入年份后就不能继续执行,但是并没有报错,问题出现在那里了?

FishC 发表于 2025-4-4 16:05:49

问题分析及解决方案

你的代码存在两个关键问题:


[*]逻辑结构错位:闰年判断代码被错误地嵌套在 while 循环内部,导致只有输入错误时才会触发判断
[*]类型转换错误:在循环中将输入转为 int 后,后续循环条件 year.isdigit() 会报错(因为此时 year 是整数类型)


修正后的代码


year = input("请输入一个年份:")

# 先验证输入合法性
while not year.isdigit():
    year = input("抱歉,您的输入有误,请输入一个整数:")

# 类型转换和闰年判断应放在循环外
year = int(year)
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
    print(f"{year} 是闰年")
else:
    print(f"{year} 不是闰年")


改进说明


[*]使用单独的循环处理输入验证,确保获得合法整数
[*]将类型转换和闰年判断放在循环结束后执行
[*]合并了冗余的条件判断,使逻辑更简洁
[*]使用 f-string 提升代码可读性


这个版本会先确保输入是纯数字,然后统一进行类型转换和闰年判断,避免原代码中可能出现的类型错误和逻辑遗漏。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

骆驼在西部 发表于 2025-4-4 16:15:00

year = input('请输入一个年份:')

while not year.isdigit():
    year = input("抱歉,您的输入有误,请输入一个整数:")
int(yuer)   
if year % 400 == 0:
    print(year,'是闰年')
else:
   if year % 4 == 0 and year % 100 != 0 :   
         print(year,'是闰年')
   else:
         print(year,'不是闰年')
            

会报错:
请输入一个年份:2035
Traceback (most recent call last):
File "C:\Users\Lenovo\Downloads\leep_year.py", line 5, in <module>
    int(yuer)
NameError: name 'yuer' is not defined


还有:f"{year} 这个符号还没有学习到 不知道他的含义

骆驼在西部 发表于 2025-4-4 16:21:29

骆驼在西部 发表于 2025-4-4 16:15
会报错:
请输入一个年份:2035
Traceback (most recent call last):



year = input('请输入一个年份:')

while not year.isdigit():
    year = input("抱歉,您的输入有误,请输入一个整数:")
int(yuer)   
if year % 400 == 0:

    print(year,'是闰年')
else:
   if year % 4 == 0 and year % 100 != 0 :   
         print(year,'是闰年')
   else:
         print(year,'不是闰年')

还是会报错:
请输入一个年份:2035
Traceback (most recent call last):
File "C:\Users\Lenovo\Downloads\leep_year.py", line 5, in <module>
    int(yuer)
NameError: name 'yuer' is not defined


还有:f"{year} 这个符号还没有学习到 不知道他的含义

player-none 发表于 2025-4-4 20:18:13

骆驼在西部 发表于 2025-4-4 16:15
会报错:
请输入一个年份:2035
Traceback (most recent call last):


报错那行改成year=int(year)

smallwh 发表于 2025-4-4 21:12:09

代码存在的两个问题:
1. 缩进问题。判断部分应在循环之外。
2. 应该先通过循环确保 year 符合要求后,在循环外将其转换为整数。
year = input('请输入一个年份:')

while not year.isdigit():
    year = input("抱歉,您的输入有误,请输入一个整数:")
year = int(year)
   
if year % 400 == 0:
    print(year,'是闰年')
else:
    if year % 4 == 0 and year % 100 != 0 :   
      print(year,'是闰年')
    else:
      print(year,'不是闰年')


f"{year} " 是格式化字符串,可以方便地在字符串中显示变量的值,以后还会学习到的。

骆驼在西部 发表于 2025-4-4 23:10:53

smallwh 发表于 2025-4-4 21:12
代码存在的两个问题:
1. 缩进问题。判断部分应在循环之外。
2. 应该先通过循环确保 year 符合要求后,在 ...

int(yuer)

j检查了半天就是这句代码出问题了,一直没有发现 ,报错的内容也看不懂,不是缩进问题{:10_303:}
页: [1]
查看完整版本: 代码不能执行的问题所在,求指教