一.题目
输入某年某月某日,判断这一天是这一年的第几天?
二.思路
首先需要考虑平闰年天数不同的问题。
其次计算天数时,已经过去的月份包含的天数是可以确定的,因此我们可以提前计算出。
最后根据 “天数 = 至上一个月已过天数 + 这个月已过天数”写出程序
三.代码
①普通版:
year = int(input("请输入年:\n"))#用int()将字符型变量改为整形,以便之后的运算
month = int(input("请输入月:\n"))
day = int(input("请输入日:\n"))
months1 = [0,31,60,91,121,152,182,213,244,274,305,335,366]#闰年
months2 = [0,31,59,90,120,151,181,212,243,273,304,334,365] #平年
if ((year%4 == 0)and(year%100 != 0)) or((year%100 ==0)and(year%400 == 0)):#判断是否是闰年
date = months1[month-1]+day
else:#否则为平年
date = months2[month-1]+day
print("这一天是这一年的第{:.0f}天".format(date))
②升级版:
day_of_month =[0,31,28,31,30,31,30,31,31,30,31,30]
partdays = 0
year=int(input('Year:'))
month=int(input('Month:'))
day=int(input('day:'))
for i in range(month):#计算当前月份之前的所有天数
partdays += day_of_month[i]
totalday = partdays+day#到当前这一天为止所有天数
if (month > 2) and (year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)):
totalday += 1
print(totalday)
③函数版:
day_of_month =[0,31,28,31,30,31,30,31,31,30,31,30]
partdays = 0
'''
def funcname(paralist):
function body
'''
def get_date():#获取用户输入日期 年月日
year = int(input('Year:'))
month = int(input('Month:'))
day = int(input('day:'))
return (year,month,day) #返回元组 一个函数可以返回多个值
def is_leap(year):#判断一个年份是否闰年
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
return True
else:
return False
def cal_days(year,month,day):# 计算当前这一天是当年的第几天
partdays = 0
for i in range(month): # 计算当前月份之前的所有天数
partdays += day_of_month[i]
if is_leap(year) and month > 2:
return partdays + day +1 # 到当前这一天为止所有天数totalday += 1
else:
return partdays + day
def main():
year,month,day = get_date()
days = cal_days(year,month,day)
print('{}年{}月{}日是这年的第{}天'.format(year,month,day,days))
main()