Задача: Магические методы. Работа с временем
Описание
Напишите класс Time
, который будет представлять время в различных форматах.
Атрибуты и методы класса:
- атрибут
hours
- целое число, представляющее часы - атрибут
minutes
- целое число, представляющее минуты - метод
is_night()
- который проверяет, является ли время ночным (с 22:00 до 6:00 включительно). ВозвращаетTrue
илиFalse
. - метод
difference(other)
- который вычисляет разницу в минутах между двумя объектамиTime
. Метод должен работать корректно вне зависимости от порядка объектов. Должен вощвращать абсолютное значение разницы (без учета знака).
Класс должен поддерживать следующие операции:
Инициализация:
При инициализации,
Time
принимает на вход либо строку в формате "HH:MM" или "HH:MM AM/PM", представляющую время, либо два целых числа - часы и минуты. Необходимо проверить корректность входных данных:часы должны быть в диапазоне от 0 до 23, а минуты - от 0 до 59.
если используется формат "HH:MM AM/PM", то AM/PM должны быть указаны в верхнем регистре.
в формате "HH:MM AM/PM" часы 12:00 AM соответствуют 00:00, а 12:00 PM соответствуют 12:00 (т.е. часы должны быть в диапазоне от 0 до 12).
В случае некорректных данных выбрасывается исключение
ValueError
.# Создание объектов класса Time
time1 = Time("12:30") # Соответствует времени 12:30
time2 = Time(14, 15) # Соответствует времени 14:15
time3 = Time("10:45 AM") # Соответствует времени 10:45
time4 = Time("10:45 PM") # Соответствует времени 22:45
Операции с временем:
Реализуйте операции сложения и вычитания с целым числом (минутами), с строкой формата "HH:MM" и с другим объектом
Time
, используя магические методы, чтобы они работали с помощью стандартных операторов (+, -). Результат операции должен быть возвращен в виде нового объектаTime
.Корректно высчитывайте время, при переходе на следующий день (например, прибавление 70 минут к 23:50).
При вычитании времени, если время выходит за пределы текущего дня (например, из 01:00 вычитаем 120 минут), необходимо выбросить исключение
ValueError
.
Это должно работать и в случае представления в формате "HH:MM AM/PM".
#Пример операций с целым числом (минутами)
Time("12:30") + 45 # Результат: 13:15
Time(14, 15) - 30 # Результат: 13:45
Time("06:30 AM") + 30 # Результат: 07:00
#Пример операций с другим объектом Time
Time("11:30 PM") + Time("02:15") # Результат: 01:45
Time("02:30 PM") - Time("02:45") # Результат: 11:45
#Пример операции с строкой
Time("13:30") + "02:30" # Результат: 16:00
Сравнение времени:
Реализуйте магические методы для сравнения времени, чтобы можно было использовать стандартные операторы сравнения (==, !=, <, >). Сравнение должно учитывать формат AM/PM. Также можно сравнивать с строкой формата "HH:MM".
# Пример операций сравнения
Time("13:30") == Time(13, 30) # Результат: True
Time("13:30") == Time("01:30 PM") # Результат: True
Time("12:30") != Time("13:30") # Результат: True
Time("12:30") > Time("11:30") # Результат: True
Time("11:30") > Time("12:30") # Результат: False
# Пример сравнения с строкой
Time("01:30 PM") == "13:30" # Результат: True
Представление:
Должна быть возможность получить строковое представление объекта - строку, представляющую время в формате "HH:MM" (формат 24 часов, т.е. без AM/PM).
print(Time("13:30")) # Вывод: 13:30
print(Time(13, 30)) # Вывод: 13:30
print(Time("10:45 AM")) # Вывод: 10:45
print(Time("10:45 PM")) # Вывод: 22:45
Характеристики решённой задачи
Список файлов
