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)

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM