跳到主要内容

2.4 判断某一天是一年的第几天

题目

  • 输入某年某月某日,判断这一天是这一年的第几天?

程序分析:闰年时需考虑二月多加一天

期望输入输出:

输入:
year: 2022
month: 3
day: 3

期望输出:
这一天是一年的第62

输入:
year: 2020
month: 3
day: 1
期望输出:
这一天是一年的第61

程序源代码,解法一:

year = int(input('year: '))
month = int(input('month: '))
day = int(input('day: '))

sum_day_till_by_month = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334) # 某个月之前的月份的总天数,比如如果我输入的是4月,那么前三个月的总天数为90天(假设2月天数为28天,闰年后面再补充)
sum_day_till_by_day = 0
if 0 < month <= 12:
sum_day_till_by_day = sum_day_till_by_month[month - 1]
else:
print('data error')

sum_day_till_by_day += day # 此时再加上当月的输入的天数
leap = False # 是否是闰年
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)): # 闰年的计算方式,如果是世纪年(可以整除一百),则看能否整除四百,否则,看能否整除4
leap = True
if leap and (month > 2): # 如果是闰年,并且月份大于2,此时少计算闰月的一天,需要加上
sum_day_till_by_day += 1
print('it is the %dth day.' % sum_day_till_by_day)


程序源代码,解法二:

def is_leap_year(y):            # 定义一个函数来判断是否为闰年
return y % 400 == 0 or (y % 4 == 0 and y % 100 != 0)

day_of_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]
# 先用一个数组存储每个月有多少天,注意这里第一个数是0,意思是输入为n月,先计算前 n-1 个月的天数,同样二月先给28天

res = 0
year = int(input('year:'))
month = int(input('month:'))
day = int(input('day:'))
if is_leap_year(year):
day_of_month[2] += 1

for i in range(month):
res += day_of_month[i]
print('这一天是一年的第%d天' % (res + day))

参考资料: