Введение
В этом проекте вы научитесь создавать калькулятор времени путешествия с использованием Python. Этот калькулятор поможет вам определить максимальные даты в прошлом и будущем, которые может достичь космический корабль, совершающий путешествие во времени, на основе текущей даты и предполагаемого количества дней, которое может проехать корабль.
👀 Предварительный просмотр
## Входные данные:
## Выходные данные:
🎯 Задачи
В этом проекте вы научитесь:
- Извлекать информацию о дате из заданной строки
- Вычислять даты в прошлом и будущем на основе заданного количества дней
- Форматировать вычисленные даты и возвращать их в виде списка строк
🏆 Достижения
После завершения этого проекта вы сможете:
- Разобраться, как работать с датами и timedelta в Python
- Реализовать функцию для вычисления места назначения путешествия во времени
- Обрабатывать исключения и граничные случаи в своем коде
- писать чистый и поддерживаемый код на Python
Извлечение информации о дате
В этом шаге вы научитесь извлекать год, месяц и день из входной строки времени.
- Откройте файл
time_travel_destination.pyв своем предпочитаемом редакторе кода. - Найдите функцию
time_travel_destination(time: str, days: int). - Внутри функции добавьте следующий код, чтобы извлечь год, месяц и день из параметра
time:
try:
## Извлекаем год, месяц и день из строки времени
year, month, day = map(int, time.split("-"))
## except (ValueError, OverflowError):
## ## Если возникает ValueError или OverflowError, возвращаем пустой список
## return []
эта строка использует функцию map() и метод split() для преобразования строки time в список целых чисел, представляющих год, месяц и день.
- Далее вам нужно проверить, является ли извлеченная дата допустимой. Для этого можно использовать функцию
datetime.date():
## Извлекаем год, месяц и день из строки времени
year, month, day = map(int, time.split("-"))
## Проверяем, является ли дата допустимой
datetime.date(year, month, day)
Если дата допустима, эта строка не вызовет никаких исключений. Если дата недопустима, будет вызвано исключение ValueError.
Вычислить даты в прошлом и будущем
В этом шаге вы научитесь вычислять даты в прошлом и будущем на основе заданного количества дней.
- Внутри функции
time_travel_destination(time: str, days: int)добавьте следующий код для вычисления дат в прошлом и будущем:
try:
past_time = datetime.date(year, month, day) - datetime.timedelta(days=days)
except OverflowError:
past_time = datetime.date(1, 1, 1)
future_time = datetime.date(year, month, day) + datetime.timedelta(days=days)
Переменная past_time вычисляется путем вычитания параметра days из исходной даты. Однако, если полученная дата находится до минимальной представимой даты (1 января 1 года нашей эры), будет возбуждено исключение OverflowError. В этом случае мы устанавливаем past_time равной минимальной представимой дате.
Переменная future_time вычисляется путем добавления параметра days к исходной дате.
Форматировать и возвращать результаты
В этом шаге вы научитесь форматировать даты в прошлом и будущем и возвращать их в виде списка строк.
- Внутри функции
time_travel_destination(time: str, days: int)добавьте следующий код для форматирования дат в прошлом и будущем и возврата их в виде списка:
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
Метод strftime() используется для форматирования объектов datetime.date past_time и future_time в строки в формате "dd-mm-yyyy".
- Наконец, добавьте блок обработки исключений, чтобы перехватить любые исключения
ValueErrorилиOverflowError, которые могут возникнуть во время выполнения функции:
except (ValueError, OverflowError):
return []
Если какое-либо из этих исключений возникает, функция вернет пустой список.
Ваша итоговая функция time_travel_destination(time: str, days: int) должна выглядеть так:
import datetime
def time_travel_destination(time: str, days: int):
try:
## Извлекаем год, месяц и день из строки времени
year, month, day = map(int, time.split("-"))
## Проверяем, является ли дата допустимой
datetime.date(year, month, day)
try:
## Вычитаем указанное количество дней из заданной даты
past_time = datetime.date(year, month, day) - datetime.timedelta(days=days)
except OverflowError:
## Если возникает OverflowError, устанавливаем past_time равной минимальной представимой дате
past_time = datetime.date(1, 1, 1)
## Добавляем указанное количество дней к заданной дате
future_time = datetime.date(year, month, day) + datetime.timedelta(days=days)
## Возвращаем даты в прошлом и будущем в формате 'dd-mm-yyyy'
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
except (ValueError, OverflowError):
## Если возникает ValueError или OverflowError, возвращаем пустой список
return []
Теперь вы завершили реализацию функции time_travel_destination(time: str, days: int). Вы можете протестировать функцию, запустив предоставленные примеры в основном блоке файла time_travel_destination.py. Некоторые примеры приведены ниже:
- Входные данные:
print(time_travel_destination('2238-2-11', 30))
print(time_travel_destination('2238-2-11', 0))
print(time_travel_destination('2238-2-11', 100))
- Выходные данные:
['12-01-2238', '13-03-2238']
['11-02-2238', '11-02-2238']
['03-11-2237', '22-05-2238']
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более лабораторных работах в LabEx, чтобы улучшить свои навыки.



