iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
自我挑戰組

轉職AI軟體工程師的自我學習分享筆記系列 第 24

Python 速算器: 輸入日期, 判斷是這一年的第幾天?

  • 分享至 

  • xImage
  •  

前情提要:

經過一連串~ brain storming, debug, paper studying, writing articles, positive of covid... hahaha jk lmao /images/emoticon/emoticon37.gif/images/emoticon/emoticon39.gif

However, I realised that my health is the piority! As a life where you have the energy to focus on everything else you want and dream of.
So, let's have a break for coding some simple python games.

Those games are my first side project, which also my self-study of Python before I start the AI and Big Data program. I learned it from the "小象學堂" which is a wechat account (kinda like wechat python learning robot ?!) that I have given from my brother. (p.s. My siblings were engineer before I be an AI RD/PM... but I'm the only one, who still alive in this field/images/emoticon/emoticon02.gif ... well life is hard... it's another story~ haha LOL, let come back to the article /images/emoticon/emoticon33.gif)

https://ithelp.ithome.com.tw/upload/images/20221002/201516814I2LN3jgWy.jpg
https://ithelp.ithome.com.tw/upload/images/20221002/20151681IPZp3gWF20.jpg

此篇文章介紹:

使用者輸入一個日期(YYY/MM/DD),然後根據日期獲取對應的年份是否為閏年, 在劃分月份為30天和31天的月份, 並以迴圈的方式計算輸入月份相對應的天數, 在將輸入月份-1 (etc. 若輸入"5月", 即5-1= 4 >>> 1~4月的天數相加起來)的之前月份天數的天數相加起來(若是一開始輸入的年份為閏年, 則計算到2月時天數只會算成29天), 加上使用者輸入的天數(etc. 1~4月的總天數+使用者輸入的日期(DD)=> 這是YYYY年的第XXX天 ), 程式輸出結果為"使用者輸入日期的該年份的第XXX天"。
所以在設計此程式專案前, 我們必須知道2月哪時候為閏年? 哪時候不為閏年囉!

https://ithelp.ithome.com.tw/upload/images/20221002/20151681AnYMv6wwDL.png
https://ithelp.ithome.com.tw/upload/images/20221002/20151681X7Azk5V55A.png

如何判斷是否為閏年?

在西曆中,正常年份由 365 天組成。 因為恆星年真正的時間長度 (地球繞太陽一周所需的時間) 實際上是 365.2425 天,因此每四年都會使用一次 366 天的「閏年」,以弭平三個正常 (但短的) 年份所導致的誤差。

閏年的2月有 29 天,平年的2月則是 28 天 (2月不是閏年,就是平年)

任何能以 4 整除的年份都是閏年:例如 1988 年、1992 年及 1996 年都是閏年。不過,仍必須將一個小錯誤列入考量。 為了弭平此誤差,西曆規定能以 100 (例如1900 年) 整除的年份,同時也要能以 400 整除,才算是閏年。

  • 年份不是閏年:1700、1800、1900、2100、2200、2300、2500、2600
    原因是這些年份能以 100 整除,但無法以 400 整除。
  • 年份為閏年:1600、2000、2400
    原因是這些年份都能同時以 100 和 400 整除。

滿足以下兩個條件的整數才可以稱為閏年:

  1. 普通閏年:能被4整除但不能被100整除(Etc. 2004年就是普通閏年)
  2. 世紀閏年:能被400整除(Etc. 2000年是世紀閏年,1900年不是世紀閏年)
#使用if/else進行判斷是否為閏年:
year%4==0 and year%100!=0 or year %400=0

https://ithelp.ithome.com.tw/upload/images/20221002/20151681WwZwrzvBxa.png

基礎實作:

from datetime import datetime

def is_leap_year(year):
    """
        判斷year是否為潤年
        是, 返回True
        否, 返回False
    """
    is_leap = False
    if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 !=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')

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

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

    for i in range(1, month):
     # 計算之前月份天數的總和以及當前月份天數
     days_in_month_list = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
     if is_leap_year(year):
         days_in_month_list[1] = 29
         days = sum(days_in_month_list[: month - 1]) + day
         print('這是{}年的第{}天'.format(year, day))

if __name__ == '__main__':
    main()

結果如下圖:

https://ithelp.ithome.com.tw/upload/images/20221002/20151681FJsGN6IkLC.png

https://ithelp.ithome.com.tw/upload/images/20221002/20151681cVbQOhcFfj.png

/images/emoticon/emoticon42.gif


上一篇
Python 速算器: 52週存錢挑戰
下一篇
Python 速算器: 匯率轉換 Currency Converter
系列文
轉職AI軟體工程師的自我學習分享筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言