Python eq: сравнение объекта с диапазоном допустимых значений
Напишите решение на Python и проверьте его на странице.
Другие упражнения по этой теме: Сравнение и хеширование Python: задачи на eq, lt и set.
Допуски калибровочного стенда
На автоматизированном калибровочном стенде детали сопоставляются с эталонными шаблонами допусков. Шаблон задаёт замкнутый диапазон допустимых размеров от минимального до максимального значения, включая случай вырожденного интервала с совпадающими границами, а деталь обладает фиксированным точным размером.
Объекты деталей умеют напрямую сравниваться только друг с другом по величине размера. При попытке применить операторы < или > к шаблону или объекту любого другого постороннего типа деталь возвращает NotImplemented, передавая право сравнения второму участнику проверки.
В свою очередь, шаблон допуска сопоставляется как с другими шаблонами — по ширине их диапазона, — так и с деталями через механизм отражённых вызовов. Деталь считается строго меньше шаблона, только если её размер строго меньше левой границы интервала, и строго больше шаблона, только если её размер строго превосходит правую границу. Если же размер детали оказывается внутри диапазона или совпадает с любой из его границ, оба строгих неравенства дают отрицательный ответ.
Реализуйте классы детали и шаблона с однозначным поведением операторов < и > на границах допуска и корректной работой отражённых вызовов через NotImplemented.
Что уже дано
В редакторе объявлены заготовки классов Part и Tolerance с методами __init__, __lt__ и __gt__, тела которых вам предстоит написать.
Вспомогательная функция observe_tolerance_comparisons доступна в среде во время проверки, реализовывать её самостоятельно не нужно.
Что нужно сделать
Реализуйте классы Part и Tolerance:
- Класс
Part(size):
- сохраняет переданный размер в атрибуте экземпляра
.size; - реализует прямые методы
__lt__и__gt__для сравнения с другими объектамиPart(а также их подклассами) по значениюsize; - для операндов любого другого типа (включая
Toleranceи его подклассы) оба метода должны возвращать синглтонNotImplemented.
- Класс
Tolerance(min_size, max_size):
- сохраняет границы диапазона в атрибутах
.min_sizeи.max_size(гарантируется, чтоmin_size <= max_size); - при сравнении с другим объектом
Tolerance(или его подклассом) операторы<и>сравнивают ширину диапазонов(max_size - min_size); - при сравнении с объектом
Part(или его подклассом) реализует отражённые вызовы так, чтобы выражениеpart < templateдавалоTrueтогда и только тогда, когдаpart.size < template.min_size, аpart > template— когдаpart.size > template.max_size; - если размер детали лежит внутри замкнутого интервала
[min_size, max_size]либо совпадает с любой из границ (в том числе для вырожденного интервала с нулевой шириной), оба строгих неравенства даютFalse; - для любых посторонних типов, не относящихся к семействам
ToleranceилиPart, методыToleranceвозвращаютNotImplemented.
Все числовые параметры представляют собой целые числа в диапазоне от -1 000 000 до 1 000 000, а количество проверяемых пар сравнений в одном запуске составляет от 0 до 1000. Никаких правил полного порядка, равенства (__eq__), хеширования (__hash__) или сортировки реализовывать не требуется.
Ввод и вывод
Стандартные потоки ввода stdin и вывода stdout в решении не используются: считывать ввод и вызывать print() не нужно. После выполнения кода учащегося проверяющая система считывает из пространства имён модуля классы верхнего уровня Part и Tolerance и вызывает их с проверочными аргументами.
Пример использования
part = Part(10)
template = Tolerance(10, 12)
print(part < template, part > template)
print(Part(8) < template, Part(13) > template)
Вывод:
False False True True
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Изменение хеша объекта в set: вопрос по Python hash и eq
- NotImplemented в lt: как Python сравнивает объекты
- Сравнение объектов Python: lt и несовместимые группы
- Python set: найдите объекты с изменённым хешем
- Rich comparisons Python: ранжирование объектов разных классов
- Удаление ключа из ChainMap в Python: проверка поведения del
