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

      

  • 相关阅读:
    C++学习总结 复习篇2
    C++ 学习总结 复习篇
    Git 安装与使用
    前两周工作总结
    [bzoj1033] [ZJOI2008]杀蚂蚁antbuster
    [bzoj1031] [JSOI2007]字符加密Cipher
    [bzoj1030] [JSOI2007]文本生成器
    [bzoj1029] [JSOI2007]建筑抢修
    [bzoj1028] [JSOI2007]麻将
    [bzoj1026] [SCOI2009]windy数
  • 原文地址:https://www.cnblogs.com/andy9468/p/13025836.html
Copyright © 2020-2023  润新知