python案例:追溯時間
阿新 • • 發佈:2018-12-31
第一個版本:簡單引入
''' 作者: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()