Я написал следующую Python функцию, которая берет из пользовательских данных в форме даты их рождения и вычисляет, сколько им лет сегодня и сколько дней осталось до их дня рождения в этом году:
# %load time_2_bday.py
"""
Created on Thu Feb 20 16:01:33 2020
@author: hussain.ali
"""
import datetime as dt
import pytz
def days_to_birthday():
''' this function takes from the user data in the form of their birthdate
and calculates how many more days are remaining until their birthday this year'''
a = (input('Enter the date on which you were born:'))
b = (input('Enter the month in which you were born:'))
c = (input('Enter the year in which you were born:'))
d = '%s%s%s'%(c,b,a)
now = dt.datetime.now()
curr_yr = str((now.year))
td = dt.datetime.today()
#td.replace(hour=0, minute=0, second=0, microsecond=0)
birthday = dt.datetime.strptime(d, '%Y%m%d')
days_old = td - birthday
if int(b) <= td.month:
days_to_birthday = td - dt.datetime.strptime('%s%s%s'%(curr_yr,b,a), '%Y%m%d')
print('You stand', days_old.days//365,'years old today and there are', 365- days_to_birthday.days, 'days remaining until your next birthday!')
else:
days_to_birthday = dt.datetime.strptime('%s%s%s'%(curr_yr,b,a), '%Y%m%d') - td
print('You stand', days_old.days//365,'years old today and there are',days_to_birthday.days, 'days remaining until your next birthday!')
days_to_birthday()
Он работает нормально , за исключением , поскольку он дает на выходе количество дней на единицу меньше, чем фактическое количество дней, оставшихся до следующего дня рождения, т.е.
============= RESTART: C: \ Users \ hussain.ali \ Desktop \ time_2_bday.py ============= Введите дату в котором вы родились: 10 Введите месяц, в котором вы родились: 05 Укажите год, в котором вы родились: 1986 Сегодня вам исполнилось 33 года, и до вашего следующего дня рождения осталось 74 дня!
Хотя фактическое количество дней, оставшихся до 10 мая 2020 года, составляет 75.
Это потому, что в феврале этого года 29 дней, и я пропустил что-то, что должно учитывать этот 1 дополнительный день?
Может кто-нибудь также сказать мне, если этот сценарий Тим в курсе или наивны?