Калькулятор пункта назначения времени путешествия

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь создавать калькулятор времени путешествия с использованием Python. Этот калькулятор поможет вам определить максимальные даты в прошлом и будущем, которые может достичь космический корабль, совершающий путешествие во времени, на основе текущей даты и предполагаемого количества дней, которое может проехать корабль.

👀 Предварительный просмотр

## Входные данные:

## Выходные данные:

🎯 Задачи

В этом проекте вы научитесь:

  • Извлекать информацию о дате из заданной строки
  • Вычислять даты в прошлом и будущем на основе заданного количества дней
  • Форматировать вычисленные даты и возвращать их в виде списка строк

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться, как работать с датами и timedelta в Python
  • Реализовать функцию для вычисления места назначения путешествия во времени
  • Обрабатывать исключения и граничные случаи в своем коде
  • писать чистый и поддерживаемый код на Python

Извлечение информации о дате

В этом шаге вы научитесь извлекать год, месяц и день из входной строки времени.

  1. Откройте файл time_travel_destination.py в своем предпочитаемом редакторе кода.
  2. Найдите функцию time_travel_destination(time: str, days: int).
  3. Внутри функции добавьте следующий код, чтобы извлечь год, месяц и день из параметра time:
try:
    ## Извлекаем год, месяц и день из строки времени
    year, month, day = map(int, time.split("-"))
## except (ValueError, OverflowError):
##     ## Если возникает ValueError или OverflowError, возвращаем пустой список
##     return []

эта строка использует функцию map() и метод split() для преобразования строки time в список целых чисел, представляющих год, месяц и день.

  1. Далее вам нужно проверить, является ли извлеченная дата допустимой. Для этого можно использовать функцию datetime.date():
## Извлекаем год, месяц и день из строки времени
year, month, day = map(int, time.split("-"))
## Проверяем, является ли дата допустимой
datetime.date(year, month, day)

Если дата допустима, эта строка не вызовет никаких исключений. Если дата недопустима, будет вызвано исключение ValueError.

Вычисление дат в прошлом и будущем

В этом шаге вы научитесь вычислять даты в прошлом и будущем на основе заданного количества дней.

  1. Внутри функции 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 к исходной дате.

Форматирование и возврат результатов

В этом шаге вы научитесь форматировать даты в прошлом и будущем и возвращать их в виде списка строк.

  1. Внутри функции 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".

  1. Наконец, добавьте блок обработки исключений, чтобы перехватить любые исключения 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, чтобы улучшить свои навыки.