python基础-判断一年中的第几天

问题:

用函数实现输入某年某月某日,判断这一天是这一年的第几天?闰年情况也考虑进去
如:20160818,是今年第x天。

代码实现:

import copy
from functools import reduce


def rankDay(date_str):
    '''
    计算日期为当年的第x天
    :param date_str: 日期
    :return sum_days: x天
    '''
    # listx = [ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12]
    list1_p = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  # 平年
    list2_r = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  # 闰年
    # print(reduce(lambda x, y: x + y, list1))
    # print(reduce(lambda x, y: x + y, list2))
    if len(date_str) == 8 and date_str.isnumeric():
        # 输入验证正确后1
        # 获取年月日
        year_int = int(date_str[0:4])
        month_int = int(date_str[4:6])
        day_int = int(date_str[6:8])
        # print(year_int)
        # print(month_int)
        # print(day_int)

        if (month_int >= 1 and month_int <= 12) and (day_int >= 1 and day_int <= 31):
            # 进一步验证输入数的正确性2
            #  计算天数

            # 判断润平年。平年有365天,闰年有366天。
            days_list = []  # 计算使用的日子列表
            month_days = 0  # 计算使用的前面整月的天数和
            day_days = 0  # 计算使用的本月的天数和
            if year_int % 400 == 0 or (year_int % 4 == 0 and year_int % 100 != 0):
                # 闰年。366天
                days_list = copy.deepcopy(list2_r)  # 深拷贝
            else:
                # 平年。356天
                days_list = copy.deepcopy(list1_p)  # 深拷贝

            # 计算前面多个整月的天数
            if month_int - 1 > 0:
                # 前面有多个整月
                list_cal = days_list[0:(month_int - 1)]
                # print(list_cal)
                month_days = reduce(lambda x, y: x + y, list_cal)

            else:
                month_days = 0

            # 计算本月的天数
            day_days = day_int

            # 计算总天数
            sum_days = month_days + day_days
            print("%s是%s年的第%s天" % (date_str, year_int, sum_days))
            return sum_days

        else:
            print("请输入正确的格式,如:20160101。月份不大于12,日子不大于31")

    else:
        print("请输入正确的格式,如:20160101")


if __name__ == '__main__':
    while True:
        date_str = input("请输入日期(如:20160101):").strip()
        sum_days = rankDay(date_str)
        print(sum_days)

  

 

posted @ 2020-06-01 16:22  安迪9468  阅读(1595)  评论(0编辑  收藏  举报