1. 程式人生 > >python案例:追溯時間

python案例:追溯時間

第一個版本:簡單引入

加油,碼農!

'''
    作者:Z_Howe01
    功能:輸入某年某月,判斷這一天是這一年的第幾天
    版本:1.0
    日期:2018.12.30
'''
	#閏年判斷:1.四年一閏,百年不閏(y % 4 == 0 and y % 100 != 0);2.四百年再閏(y % 400 == 0)

from datetime import datetime
#(元組操作)
def main():
    '''
    主函式 
    '''
    input_date_str = input('請輸入日期(yyyy/mm/dd)')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day

    #計算之前月份天數的總和以及當前月份天數
    days_in_month_cup = (31,28,31,30,31,30,31,31,30,31,30,31)
    #print(days_in_month_cup[:month - 1])
    days = sum(days_in_month_cup[: month - 1]) + day

    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        if month > 2:
            days += 1
    print('這是第{}天。'.format(days))

if __name__ == '__main__':
    main()

第二個版本:用列表(list)替換元組(tuple)

'''
    作者:Z_Howe01
    功能:用列表(list)替換元組(tuple)
    版本:2.0
    日期:2018.12.30
'''
#閏年判斷:1.四年一閏,百年不閏(y % 4 == 0 and y % 100 != 0);2.四百年再閏(y % 400 == 0)
#(列表操作)
from datetime import datetime

def is_leap_year(year):
    '''
    判斷year是否為閏年
    是—>返回True
    否—>返回False
    '''
    is_leap = False
    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        is_leap = True
    return is_leap

def main():
    '''
    主函式 
    '''
    input_date_str = input('請輸入日期(yyyy/mm/dd)')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day

    #計算之前月份天數的總和以及當前月份天數
    days_in_month_list = [31,28,31,30,31,30,31,31,30,31,30,31]
    if is_leap_year(year):      #如果上面的函式返回值為True
        days_in_month_list[1] = 29
    days = sum(days_in_month_list[: month - 1]) + day
    print('這是第{}天。'.format(days))

if __name__ == '__main__':
    main()

第三個版本:用集合(set)替換列表(list)

'''
    作者:Z_Howe01
    功能:用集合(set)替換列表(list)
    版本:3.0
    日期:2018.12.30
'''
#   A|B = A並B , A-B = 屬於A但不屬於B , A&B = A交B ;
#   A^B = 返回集合A和B中的元素,但不包括同時在其中的元素
#   閏年判斷:1.四年一閏,百年不閏(y % 4 == 0 and y % 100 != 0);2.四百年再閏(y % 400 == 0)
#   (集合操作)
#   >>> s = {1,2,3,4,5}
#   >>> a = {2,3,5,6,7,8}
#   >>> s|a
#   {1, 2, 3, 4, 5, 6, 7, 8}
#   >>> s&a
#   {2, 3, 5}
#   >>> s-a
#   {1, 4}
#   >>> s^a
#   {1, 4, 6, 7, 8}

from datetime import datetime

def is_leap_year(year):
    '''
    判斷year是否為閏年
    是—>返回True
    否—>返回False
    '''
    is_leap = False
    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        is_leap = True
    return is_leap

def main():
    '''
    主函式 
    '''
    input_date_str = input('請輸入日期(yyyy/mm/dd):')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day

    #包含30天  月份集合
    _30_days_month_set = {4,6,9,11}
    _31_days_month_set = {1,3,5,7,8,10,12}

    #初始化值
    days = 0
    days += day
    for i in range(1,month):
        if i in _30_days_month_set:
            days += 30
        elif i in _31_days_month_set:
            days += 31
        else:
            days += 28
    if is_leap_year(year) and month > 2:
        days += 1

    print('這是第{}天。'.format(days))

if __name__ == '__main__':
    main()

第四個版本:用字典(dict)替換集合(set)

'''
    作者:Z_Howe01
    功能:用字典(dict)替換集合(set),將月份及其對應天數通過字典表示
    版本:4.0
    日期:2018.12.30
'''

#   閏年判斷:1.四年一閏,百年不閏(y % 4 == 0 and y % 100 != 0);2.四百年再閏(y % 400 == 0)
#   (字典操作)
#   鍵值組合 eg:身份證號——個人資訊
#   通過對映查詢資料項
#   一般形式:dict1 = {}
#   一般形式:dict1 = {'egg':12.6,'milk':5.56'}
#   遍歷所有的key     for key in dict1.keys():
#                            print(key)
#   遍歷所有的value  for value in dict1.values():
#                            print(value)
#   遍歷所有的資料項    for item in dict1.items():
#                             print(item)
from datetime import datetime

def is_leap_year(year):
    '''
    判斷year是否為閏年
    是—>返回True
    否—>返回False
    '''
    is_leap = False
    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        is_leap = True
    return is_leap

def main():
    '''
    主函式 
    '''
    input_date_str = input('請輸入日期(yyyy/mm/dd):')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day
    #月份——天數  字典
    month_day_dict = {1:31,
                      2:28,
                      3:31,
                      4:30,
                      5:31,
                      6:30,
                      7:31,
                      8:31,
                      9:30,
                      10:31,
                      11:30,
                      12:31}

    #初始化值
    days = 0
    days += day
    for i in range(1,month):
       days += month_day_dict[i]
    if is_leap_year(year) and month > 2:
        days += 1

    print('這是第{}天。'.format(days))

if __name__ == '__main__':
    main()

第五個版本:改變第四個版本的對映順序

'''
    作者:Z_Howe01
    功能:用字典(dict)替換集合(set),將4.0版本的“月份—天數”對映變為“天數—月份”對映
    版本:5.0
    日期:2018.12.30
'''

#   閏年判斷:1.四年一閏,百年不閏(y % 4 == 0 and y % 100 != 0);2.四百年再閏(y % 400 == 0)
#   (字典操作)
#   鍵值組合 eg:身份證號——個人資訊
#   通過對映查詢資料項
#   一般形式:dict1 = {}
#   一般形式:dict1 = {'egg':12.6,'milk':5.56'}
#   遍歷所有的key     for key in dict1.keys():
#                            print(key)
#   遍歷所有的value  for value in dict1.values():
#                            print(value)
#   遍歷所有的資料項    for item in dict1.items():
#                             print(item)
from datetime import datetime

def is_leap_year(year):
    '''
    判斷year是否為閏年
    是—>返回True
    否—>返回False
    '''
    is_leap = False
    if (year % 4 == 0 and year % 100 != 0)or (year % 400 == 0):
        is_leap = True
    return is_leap

def main():
    '''
    主函式 
    '''
    input_date_str = input('請輸入日期(yyyy/mm/dd):')
    input_date = datetime.strptime(input_date_str,'%Y/%m/%d')
    print(input_date)

    year = input_date.year
    month = input_date.month
    day = input_date.day
    
    #天數——月份  字典
    day_month_dict = {30:{4,6,9,11},
                      31:{1,3,5,7,8,10,12},
                      28:{2}}
    #初始化值
    days = 0
    days += day
    for i in day_month_dict.keys(): #遍歷day_month_dict中的所有key
        for k in range(1, month):
            if k in day_month_dict[i]:
                days += i
    if is_leap_year(year) and month > 2:
        days += 1
    print('這是第{}天。'.format(days))

if __name__ == '__main__':
    main()