Я нашел правильное решение следующей проблемы, которая использует объекты Python 3 datetime.Тем не менее, мое решение кажется очень грязным, и мне было интересно, могу ли я получить некоторую помощь по его очистке:
Вопрос: Завершите ниже функцию which_date (), которая возвращает день, следующий за указанным периодом времени после начальногоДата.Периоды времени могут быть указаны двумя различными способами: в виде количества дней, таких как «1 день» или «30 дней», или в виде количества недель, таких как «2 недели» или «12 недель».
def which_date(start_date,time):
"""
This function takes as input a string depicting a date in YYYY/mm/dd
format and a string stating a time period in the form of "X day(s)" or
"Y week(s)". Output should be a string in form YYYY/mm/dd with the date
that is X days or Y weeks after the initial date.
"""
# Every thing after this comment and before 'return end_date' is my
#code to solve this probmem
start_date_split = start_date.split('/')
start_date_split = list(map(int, start_date_split))
year, month, day = start_date_split[0], start_date_split[1],
start_date_split[2]
start_date_date_obj = datetime.date(year, month, day)
time_split = time.split(' ')
time_amount = int(time_split[0])
days_or_weeks = time_split[1]
time_to_add = datetime.timedelta(0)
if 'day' in days_or_weeks:
time_to_add = datetime.timedelta(days = time_amount)
else:
time_to_add = datetime.timedelta(weeks = time_amount)
end_date_date_obj = start_date_date_obj + time_to_add
end_date = end_date_date_obj.strftime('%Y/%m/%d')
return end_date
Ниже приведен проверочный тест:
def test():
assert which_date('2016/02/10','35 days') == '2016/03/16'
assert which_date('2016/12/21','3 weeks') == '2017/01/11'
assert which_date('2015/01/17','1 week') == '2015/01/24'
print("All tests completed.")