计算年纪 ( 岁、月、天 )
这篇文章会介绍使用 Python 的 datetime 标准函数,搭配 input 指令、串列操作、数学计算和 if 判断式,做出一个让用户输入生日,就会计算用户年龄的功能 ( 可以计算几岁几个月又几天 )。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
基本原理
计算年纪的方式,会使用标准函数的 datetime.date 取得今天的日期,再用今天的“年月日”减去生日的“年月日”,就能得到年纪,在相减的过程中,必须使用逻辑判断,处理“不足月”或“不足年”的状况。
import datetime # import datetime 標準函式
today = datetime.date.today() # 使用 datetime.date 取得今天的日期
age = input('輸入生日 ( YYYY/MM/DD ):') # 讓使用者輸入生日,格式為 YYYY/MM/DD
age_list = age.split('/') # 將使用者輸入的日期,使用「/」拆成串列
year = today.year - int(age_list[0]) # 用今天的年份,減去使用者的生日年份 ( 年份差 )
month = today.month - int(age_list[1]) # 用今天的月份,減去使用者生日的月份 ( 月份差 )
if month<0: # 如果月份差的數字小於零,表示生日還沒到
year = year - 1 # 將年份差減少 1 ( 表示跨了一年 )
month = 12 + month # 將月份差改成 12 + 月份差
day_list = [31,28,31,30,31,30,31,31,30,31,30,31] # 建立一個每個月有多少天的串列
day = today.day - int(age_list[2]) # 用今天的日期,點去使用者生日的日期 ( 月份差 )
if day<0: # 如果月份差的數字小於 0,表示生日還沒到
month = month - 1 # 將月份差減少 1
if month<0: # 如果月份差減少後小於 0
year = year - 1 # 再將年份差減少 1 ( 表示跨了一年 )
month = 12 + month # 將月份差改成 12 + 月份差
day = day_list[month] + day # 將日期差改成該月的天數 + 日期差
print(f'{year} 歲 {month} 個月 {day} 天') # 印出現在幾歲幾個月又幾天
加入闰年的判断
虽然在程序里有加入 day_list 变数,负责处理每个月有多少天的串列,但某些年份属于闰年,所以必须再透过标准函数的 calendar.isleap 判断该年是否为闰年,如果是闰年,就将二月改成 29 天。
import datetime
import calendar # import calendar 模組
today = datetime.date.today()
age = input('輸入生日 ( YYYY/MM/DD ):')
age_list = age.split('/')
year = today.year - int(age_list[0])
month = today.month - int(age_list[1])
if month<0:
year = year - 1
month = 12 + month
day_list = [31,28,31,30,31,30,31,31,30,31,30,31]
if calendar.isleap(today.year): # 判斷如果是閏年
day_list[1] = 29 # 就將二月份的天數改成 29 天
day = today.day - int(age_list[2])
if day<0:
month = month - 1
if month<0:
year = year - 1
month = 12 + month
day = day_list[month] + day
print(f'{year} 歲 {month} 個月 {day} 天')
完成结果
本篇范例测试时的日期为 2021/10/26,测试使用五个日期,分别是:2000/1/1、1999/12/31、2000/10/25、2000/10/26、2000/10/27,可以测试不足月、不足日、跨年等状况。
微信扫码关注
抖音扫码关注