用Python写一个能算出自己年龄的小程序。
其实我连我今年多少岁都不知道,最近看到了python的datetime库里面有很多好用的方法,于是就写了这样一个程序作为练习,然后又写了这样一篇文章来梳理我写代码的思考过程。
首先导入我们这个程序中需要的datetime库。
import datetime
算年龄
在算年龄之前,我们先要知道两样东西。第一个是用户的生日,第二是现在的日期
用户的生日让用户输入就行, 保存到birthday里面:
birthday = datetime.date( # 输入生日
year=int(input('请输入你的出生年份:')),
month=int(input('请输入你的出生月份:')),
day=int(input('请输入你的出生日期:'))
)
现在的日期也很好求:
today = datetime.date.today() # 现在的日期
然后怎么办呢?我发现两个date对象之间可以相减,这下就好办了,直接把today和birthday相减得到的天数除以365就能得到年龄了。因为得数精度太高,舍入到了第7位。
age = round((today - birthday).days/365, 7)
# 今天的日期与生日相减的天数除以365得出年龄
最后就可以输出啦。
print(f"今天是{today.year}年{today.month}月{today.day}日")
print(f"你今年大约{age}岁了!")运行结果
成功了。
计算还要多久过下一次生日
我们的程序功能好像有点单调了,添加一个计算还要过多久才能过下一次生日的功能吧。
首先我们要知道下一次过生日是什么时候。
生日的月份和日期是不变的,变的是年份。年份是今年或明年,可以从today变量里面获取,月份和日期可以可以从birthday中获取。因为birthday的变量名已经用过了,所以下一次过生日的时间就存在birth里面吧。
birth = datetime.date( # 最近的生日
year=today.year, # 今年
month=birthday.month,
day=birthday.day
)
然后输出:
print(f"距离你的生日还有{(birth - today).days}天")
但如果你真这么写就会出bug:出了一个bug
为什么会出bug呢?
原来还有一个地方没考虑,就是如果生日今年已经过了,那么下一次过生日就是明年了。所以要在后面增加一个判断条件:
if birth < today: # 如果今年过过了
birth = datetime.date(
year=today.year+1, # 算明年的
month=birthday.month,
day=birthday.day
)
这样子就对了
结尾
附上这个有趣的程序的完整源代码:
import datetime
birthday = datetime.date( # 输入生日
year=int(input('请输入你的出生年份:')),
month=int(input('请输入你的出生月份:')),
day=int(input('请输入你的出生日期:'))
)
today = datetime.date.today() # 现在的日期
age = round((today - birthday).days/365, 7)
# 今天的日期与生日相减的天数除以365得出年龄
birth = datetime.date( # 最近的生日
year=today.year, # 今年
month=birthday.month,
day=birthday.day
)
if birth < today: # 如果今年过过了
birth = datetime.date(
year=today.year+1, # 算明年的
month=birthday.month,
day=birthday.day
)
print(f"今天是{today.year}年{today.month}月{today.day}日")
print(f"你今年大约{age}岁了!")
print(f"距离你的生日还有{(birth - today).days}天")