用python解决题目:输入某年某月某日,判断这一天是这一年的第几天?

一.题目

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

二.思路
首先需要考虑平闰年天数不同的问题。
其次计算天数时,已经过去的月份包含的天数是可以确定的,因此我们可以提前计算出。
最后根据 “天数 = 至上一个月已过天数 + 这个月已过天数”写出程序
三.代码
①普通版:

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()

你可能感兴趣的:(Python小白的学习之路)