打印到目前为止在 python 中生活了多少天
Printing how many days one has lived so far in python
我正在尝试编写一个简单的代码来获取用户的出生日期并打印到目前为止他们已经活了多少天。虽然它不是那么精确(我没有添加月日条件来确定每个月究竟包括多少天),但似乎有更严重的计算问题我没有做对。它以某种方式显示的天数比预期的要多。我想知道为什么。
这是我的代码:
print('Enter your birth date in the following format: \nDD/MM/YYYY')
birth_date = input()
birth_day = int(birth_date.split('/')[0])
birth_month = int(birth_date.split('/')[1])
birth_year = int(birth_date.split('/')[2])
current_year = 2021
current_month = 3
current_day = 8
extra_days = ((current_year - birth_year) // 4) + ((current_year - birth_year) // 400) + 1
this_year_days = 67 #Jan=31, Feb=28, Mar=8th
birth_year_days = birth_day + ((birth_month - 1)*30)
total_days = ((current_year - birth_year)*365) + (this_year_days + birth_year_days) + extra_days
print(total_days)
当我向在线年龄计算网站提供相同的日期时,它们 return 的数量比我在这里显示的少。例如,对于 26/04/2000
,互联网显示 7622 days
,但我的代码 returns 7853 days
。我知道我没有解决这个问题的最佳方案,但我无法弄清楚我没有考虑到什么。
如果有人能帮助我,我将不胜感激。
正如 deceze 所建议的那样,使用 datetime
模块可以使这变得容易得多,对我来说,结果只差了大约 400 天。
但是继续使用您的方法,如前所述,一个问题是月份。另一个是birth_year_days
。您测量的是从一年开始以来的天数,而不是直到一年结束的天数(如果这有意义的话)。试试这个:
birth_year_days = (30 - birth_day) + ((12 - birth_month)*30)
那么,您还必须从 total_days
计算中删除 1 年:
total_days = ((current_year - birth_year - 1)*365) + (this_year_days + birth_year_days) + extra_days
无论如何,这会让你的方法在我实际答案的 3 天内完成。
作为参考,如果您想测试自己的操作方式,可以使用 datetime
模块,您可以这样做:
from datetime import datetime
actual = datetime.now() - datetime(year=birth_year, month=birth_month, day=birth_day)
print(actual)
(其中 birth_year
等的定义与代码块中的相同)
我正在尝试编写一个简单的代码来获取用户的出生日期并打印到目前为止他们已经活了多少天。虽然它不是那么精确(我没有添加月日条件来确定每个月究竟包括多少天),但似乎有更严重的计算问题我没有做对。它以某种方式显示的天数比预期的要多。我想知道为什么。
这是我的代码:
print('Enter your birth date in the following format: \nDD/MM/YYYY')
birth_date = input()
birth_day = int(birth_date.split('/')[0])
birth_month = int(birth_date.split('/')[1])
birth_year = int(birth_date.split('/')[2])
current_year = 2021
current_month = 3
current_day = 8
extra_days = ((current_year - birth_year) // 4) + ((current_year - birth_year) // 400) + 1
this_year_days = 67 #Jan=31, Feb=28, Mar=8th
birth_year_days = birth_day + ((birth_month - 1)*30)
total_days = ((current_year - birth_year)*365) + (this_year_days + birth_year_days) + extra_days
print(total_days)
当我向在线年龄计算网站提供相同的日期时,它们 return 的数量比我在这里显示的少。例如,对于 26/04/2000
,互联网显示 7622 days
,但我的代码 returns 7853 days
。我知道我没有解决这个问题的最佳方案,但我无法弄清楚我没有考虑到什么。
如果有人能帮助我,我将不胜感激。
正如 deceze 所建议的那样,使用 datetime
模块可以使这变得容易得多,对我来说,结果只差了大约 400 天。
但是继续使用您的方法,如前所述,一个问题是月份。另一个是birth_year_days
。您测量的是从一年开始以来的天数,而不是直到一年结束的天数(如果这有意义的话)。试试这个:
birth_year_days = (30 - birth_day) + ((12 - birth_month)*30)
那么,您还必须从 total_days
计算中删除 1 年:
total_days = ((current_year - birth_year - 1)*365) + (this_year_days + birth_year_days) + extra_days
无论如何,这会让你的方法在我实际答案的 3 天内完成。
作为参考,如果您想测试自己的操作方式,可以使用 datetime
模块,您可以这样做:
from datetime import datetime
actual = datetime.now() - datetime(year=birth_year, month=birth_month, day=birth_day)
print(actual)
(其中 birth_year
等的定义与代码块中的相同)