鱼C论坛

 找回密码
 立即注册
查看: 160|回复: 6

[已解决]代码不能执行的问题所在,求指教

[复制链接]
发表于 2025-4-4 16:04:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  2. while not year.isdigit():
  3.     year = int( input("抱歉,您的输入有误,请输入一个整数:"))
  4.    
  5.     if year % 400 == 0:
  6.         print(year,'是闰年')
  7.     else:
  8.         if year % 4 == 0 and year % 100 != 0 :   
  9.             print(year,'是闰年')
  10.         else:
  11.             print(year,'不是闰年')
复制代码


只能执行第一句,输入年份后就不能继续执行,但是并没有报错,问题出现在那里了?
最佳答案
2025-4-4 20:18:13
骆驼在西部 发表于 2025-4-4 16:15
会报错:
请输入一个年份:2035
Traceback (most recent call last):

报错那行改成year=int(year)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-4 16:05:49 | 显示全部楼层
问题分析及解决方案

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

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


修正后的代码


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

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

  5. # 类型转换和闰年判断应放在循环外
  6. year = int(year)
  7. if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
  8.     print(f"{year} 是闰年")
  9. else:
  10.     print(f"{year} 不是闰年")
复制代码


改进说明

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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-4 16:15:00 | 显示全部楼层
  1. year = input('请输入一个年份:')

  2. while not year.isdigit():
  3.     year = input("抱歉,您的输入有误,请输入一个整数:")
  4. int(yuer)   
  5. if year % 400 == 0:
  6.     print(year,'是闰年')
  7. else:
  8.      if year % 4 == 0 and year % 100 != 0 :   
  9.          print(year,'是闰年')
  10.      else:
  11.          print(year,'不是闰年')
  12.               
复制代码


会报错:
请输入一个年份: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
[/code]

还有:f"{year} 这个符号还没有学习到 不知道他的含义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-4 16:21:29 | 显示全部楼层
骆驼在西部 发表于 2025-4-4 16:15
会报错:
请输入一个年份:2035
Traceback (most recent call last):

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

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

  6.     print(year,'是闰年')
  7. else:
  8.      if year % 4 == 0 and year % 100 != 0 :   
  9.          print(year,'是闰年')
  10.      else:
  11.          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
[/code]

还有:f"{year} 这个符号还没有学习到 不知道他的含义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-4 20:18:13 | 显示全部楼层    本楼为最佳答案   
骆驼在西部 发表于 2025-4-4 16:15
会报错:
请输入一个年份:2035
Traceback (most recent call last):

报错那行改成year=int(year)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-4 21:12:09 | 显示全部楼层
代码存在的两个问题:
1. 缩进问题。判断部分应在循环之外。
2. 应该先通过循环确保 year 符合要求后,在循环外将其转换为整数。
  1. year = input('请输入一个年份:')

  2. while not year.isdigit():
  3.     year = input("抱歉,您的输入有误,请输入一个整数:")
  4. year = int(year)
  5.    
  6. if year % 400 == 0:
  7.     print(year,'是闰年')
  8. else:
  9.     if year % 4 == 0 and year % 100 != 0 :   
  10.         print(year,'是闰年')
  11.     else:
  12.         print(year,'不是闰年')
复制代码


f"{year} " 是格式化字符串,可以方便地在字符串中显示变量的值,以后还会学习到的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-4 23:10:53 | 显示全部楼层
smallwh 发表于 2025-4-4 21:12
代码存在的两个问题:
1. 缩进问题。判断部分应在循环之外。
2. 应该先通过循环确保 year 符合要求后,在 ...
  1. int(yuer)
复制代码


j检查了半天就是这句代码出问题了,一直没有发现 ,报错的内容也看不懂,不是缩进问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 19:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表