Python練習題 004:判斷某日期是該年的第幾天


【Python練習題 004】輸入某年某月某日,判斷這一天是這一年的第幾天?

----------------------------------------------

這題竟然寫了 28 行代碼!而且還不包含輸入數據的驗證(只能假設輸入的日期是嚴格按照格式來的)。但我堅信,一定有更簡潔的方法,比如 Python 對日期的處理。

不過反正還沒學到這些知識,現在只能用傻大粗的辦法解決。等學到高級的辦法再來更新吧~~~

思路:先判斷是否為閏年,這關系到 2 月份的天數。之后再根據月份值把前幾個月的天數累積加起來,最后再加上個“日”,就可以了。

 1 dat = input('請輸入某年某月某日,格式為 yyyy-mm-dd :')
 2 y = int(dat[0:4])  #獲取年份
 3 m = int(dat[5:7])  #獲取月份
 4 d = int(dat[8:])  #獲取日
 5 
 6 ly = False
 7 
 8 if y%100 == 0:  #若年份能被100整除
 9     if y%400 == 0:  #且能被400整除
10         ly = True  #則是閏年
11     else:
12         ly = False
13 elif y%4 == 0:  #其它情況下,若能被4整除
14     ly = True  #則為閏年
15 else:
16     ly = False
17 
18 if ly == True:  #若為閏年,則2月份有29天
19     ms = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
20 else:
21     ms = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
22 
23 days = 0
24 for i in range(1, 13):  #從1到12逐一判斷,以確定月份
25     if i == m:
26         for j in range(i-1):  #確定月份i之后,則將ms列表中的前i-1項相加
27             days += ms[j]
28         print('%s是該年份的第%s天。' % (dat, (days + d))) #最后再加上“日”,即是答案

請大神幫忙簡化下這渣代碼。跪謝!

 

【2016-10-13 更新】-------------------------------------------------------------

查了下文檔,發現有個 datetime 的庫,似乎可以用來解這題。代碼如下:

import datetime

y = int(input('請輸入4位數字的年份:'))  #獲取年份
m = int(input('請輸入月份:'))  #獲取月份
d = int(input('請輸入是哪一天:'))  #獲取“日”

targetDay = datetime.date(y, m, d)  #將輸入的日期格式化成標准的日期
print(targetDay - datetime.date(targetDay.year-1, 12, 31))  #減去上一年最后一天,可得解

思路也很簡單:獲取目標日期,然后減去上一年度的最后一天,就可以得出該日期是當年的第幾天。輸出結果如下:

請輸入4位數字的年份:2016
請輸入月份:12
請輸入是哪一天:31
366 days, 0:00:00

但就是不知道怎樣把這個結果 “366 days, 0:00:00” 處理一下、讓只剩下 “366” 這個數值…… datetime庫還得多研究研究才行。

 

【2016-10-13 更新】-------------------------------------------------------------

又好好查了查 官方文檔,發現上述代碼輸出的結果是 datetime.timedelta(),可以用 datetime.timedelta.days 輕松提取天數。更新代碼如下:

import datetime

y = int(input('請輸入4位數字的年份:'))  #獲取年份
m = int(input('請輸入月份:'))  #獲取月份
d = int(input('請輸入是哪一天:'))  #獲取“日”

targetDay = datetime.date(y, m, d)  #將輸入的日期格式化成標准的日期
dayCount = targetDay - datetime.date(targetDay.year - 1, 12, 31)  #減去上一年最后一天
print('%s是%s年的第%s天。'% (targetDay, y, dayCount.days))

輸出結果如下:

請輸入4位數字的年份:2016
請輸入月份:5
請輸入是哪一天:1
2016-05-01是2016年的第122天。

當然,正式用的時候,肯定還得驗證輸入字符的合理性,比如月份只能是 range(1,13),再比如如果是閏年且月份為2,則“天”只能是 range(1,29)等等,這里就不多寫了~~~

 

++++++++++++++++++++++++++++++++++++++++++++++

題目出處:編程語言入門經典100例【Python版】


免責聲明!

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



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