Python算法---计算天数
·
小编通过百度网盘视频自学Python已过十几日,但对这门语言的理解和运用能力仍有很大的提升空间。
在今天的学习中,小编要设计一个算法,计算今天是本年的第多少天
这是小编写的代码
#设计一个程序,输入2025-11-12,输出这一天是这一年的第多少天
#将输入的数据装化成可以进行进行进一步计算的变量
date = input("请输入日期").split('-')
year = int(date[0])
month = int(date[1])
day = int(date[2])
#储存每个月对应的日数
#闰年判断
if year % 4 == 0 and year % 100 != 0:#是4而不是100的倍数
#储存每个月对应的日数
days = [0,31,29,31,30,31,30,31,31,30,31,30,31]
Total_Days_Month = 0
if month > 1:
for i in range(11):
Total_Days_Month += days[i]
if i + 1 == month :
break
Total_Days = Total_Days_Month + day
else:
#储存每个月对应的日数
days = [0,31,28,31,30,31,30,31,31,30,31,30,31]
Total_Days_Month = 0
if month > 1:
for i in range(11):
Total_Days_Month += days[i]
if i + 1 == month :
break
Total_Days = Total_Days_Month + day
在编写完成时,小编发现计算显示结果有时有用有时没用,找不到问题所在故而求助豆包
以下是豆包的分析
你的代码存在几处明显的逻辑漏洞和语法问题,导致无法正确计算日期对应的当年天数,具体问题如下:
1. 闰年判断不完整且逻辑错误
- 原代码只判断了 “能被 4 整除且不能被 100 整除” 的情况,但遗漏了 “能被 400 整除的整百年份也是闰年” 的规则(如 2000 年是闰年,1900 年不是)。
- 更严重的是:若年份是闰年,代码仅定义了
days数组但未处理后续逻辑;若不是闰年,else分支外又重复定义了days数组,导致闰年的days数组可能被覆盖,逻辑混乱。
2. 循环累加逻辑错误
- 原代码用
for i in range(11)循环,试图累加前几个月的天数,但循环范围和终止条件错误:range(11)生成 0-10 的索引,对应数组中 0-10 月,但月份从 1 开始,实际应累加 1 到month-1月的天数。- 循环内部在
if i + 1 == month时break,但此时累加的是days[0]到days[i],而days[0]是冗余的 0,会导致多算 0 天(虽然不影响结果,但逻辑不合理)。 - 每次循环都计算
Total_Days并打印,导致多次输出错误结果(例如输入 11 月,会在循环到 1-10 月时多次打印中间值)。
3. 变量定义和作用域问题
days数组在闰年判断的if分支内定义,但else分支外又重新定义了平年的days,导致:- 若年份是闰年,
if分支内的days作用域仅限于该分支,分支外的代码可能无法访问(取决于执行顺序,可能导致days未定义的错误)。 - 平年的
days定义在else分支外,无论是否闰年都会被执行,覆盖闰年的days定义,导致闰年判断失效。
- 若年份是闰年,
4. 月份为 1 时的逻辑缺失
- 原代码中,当
month == 1时,进入else分支(即month > 1不成立),但此时没有任何计算逻辑,直接跳过,导致 1 月的日期无法输出结果。
总结
你的核心思路(拆分日期→判断闰年→累加月份天数)是正确的,但具体实现时,逻辑分支、循环范围、变量作用域和输出时机都存在问题。修正后的代码(如前所述)通过统一days数组定义、优化循环范围、集中计算总天数,解决了这些问题。
以下是豆包对我的代码修改后的新代码
date = input("请输入日期(格式如2025-11-12):").split('-')
year = int(date[0])
month = int(date[1])
day = int(date[2])
# 判断是否为闰年
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
days_in_month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 闰年2月29天
else:
days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 平年2月28天
# 计算总天数
Total_Days = 0
# 累加前几个月的天数(例如3月就累加1-2月)
for i in range(1, month):#range的一种用法
Total_Days += days_in_month[i]
# 加上当月的天数
Total_Days += day
print(f"{year}年{month}月{day}日是这一年的第{Total_Days}天")
以下是我根据错误总结之后再写的代码
#设计一个程序,输入2025-11-12,输出这一天是这一年的第多少天
#将输入的数据装化成可以进行进行进一步计算的变量
date = input("请输入日期").split('-')
year = int(date[0])
month = int(date[1])
day = int(date[2])
#判断是不是闰年,取不同的数组
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
Days = [0,31,29,31,30,31,30,31,31,30,31,30,31]
else:
Days = [0,31,28,31,30,31,30,31,31,30,31,30,31]
#设置月天数
Total_Days_In_Month = 0
#主程序,计算天数
for i in range(1,month):
Total_Days_In_Month += Days[i]
Total_Days = Total_Days_In_Month + day
print(f"今天是{year}年的第{Total_Days}天")
更多推荐



所有评论(0)