网络草包 发表于 2026-5-28 19:51:53

新人学习贴_计算给定日期是这一年中的第几天

#需求:定义一个函数,该函数接受年份,月份,和日期,作为参数,计算这一天是该年的第几天
def asd(n,y,r):
    t = 0
    if 1 > y or y> 12 :
      return "输入错误!"
    elif r >= 32 or r <= 0 :
      return "输入错误!"
    elif (y == 4 or y == 6 or y == 9 or y == 11 ) and r > 30:
      return "输入错误!"
    elif n % 4 == 0 and n % 100 != 0 or n % 400 == 0:
      if y == 2 and r > 29:
            return "输入错误!"
      february =29
    else:
      if y == 2 and r > 28:
            return "输入错误!"
      february =28
    for e in range(1,y):
      if e != 2 and e != 4 and e != 6 and e != 9 and e != 11 :
            t += 31
      elif e == 2:
            t = t + february
      elif e == 4 or e == 6 or e == 9 or e == 11 :
            t += 30
    t += r
    return t
n = int(input("请输入年份:"))
y = int(input("请输入月份:"))
r = int(input("请输入日:"))
print(asd(n,y,r))

FishC 发表于 2026-5-28 19:52:09

鱼油你好! 你的代码功能实现正确,能够判断闰年和非闰年,也能处理输入错误。作为新手,能写出逻辑清晰的代码已经很不错了!下面给你提几个简洁的改进建议,让代码更易读、更Pythonic。

1. 函数和变量命名
asd 建议改为有意义的名称,比如 day_of_year;参数 n, y, r 改为 year, month, day。

2. 简化月份天数判断
可以用列表存储每月天数,然后根据闰年修改2月天数,用 sum 直接计算前几个月的天数。

3. 减少重复的输入校验
先判断闰年,再统一检查各月份天数,逻辑会更清晰。

下面是一个改进版参考:

def day_of_year(year, month, day):
    if month < 1 or month > 12:
      return "输入错误!"
    days_in_month = [31, 28, 31, 30, 31, 30,
                     31, 31, 30, 31, 30, 31]
    # 闰年判断
    if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
      days_in_month = 29
    if day < 1 or day > days_in_month:
      return "输入错误!"
    return sum(days_in_month[:month - 1]) + day

year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入日:"))
print(day_of_year(year, month, day))


这个版本更简洁,并且避免了一长串的 or 和 if 嵌套。如果有其他疑问,欢迎继续交流!

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

Pythonyuning 发表于 2026-5-28 20:56:38

f谢谢分享
页: [1]
查看完整版本: 新人学习贴_计算给定日期是这一年中的第几天