2026/27, 10В-2, Python: Классы (часть2)

I: Сравнения

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите методы __lt__, __le__, __gt__, __ge__, __eq__, __ne__. В качестве параметра other может выступать объект одного из трех типов: int, float, Fraction.

Тестирование проводится, как в предыдущей задаче.


J: Умножение

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите методы умножения __mul__, __rmul__, __imul__ так, чтобы можно было:

Методы типа __imul__, то есть переопределяющие операторы присваивания (*=) должны возвращать self.


K: Деление

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите методы деления __truediv__, __rtruediv__, __itruediv__.


L: Возведение в степень

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите операции возведения в степень __pow__, __rpow__ так, чтобы можно было возводить дроби в степень типа int, float, Fraction, числа типа int и float в степень Fraction. Операция возведения Fraction ** int возвращает Fraction, во всех остальных случаях возвращается float.

Определите операцию __ipow__ для возведения дроби в целочисленную степень.


M: Сложение

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите операции __add__, __iadd__, __radd__.


N: Вычитание

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите операции __sub__, __isub__, __rsub__.


O: Знаки

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите операции __pos__, __neg__, __abs__.


P: Преобразование типов

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите операции __int__ (должна округлять вниз до ближайшего целого), __float__, __round__ (должна возвращать значение типа float, можно использовать функцию round для величины типа float).


Q: Ближайшая аликвотная дробь

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

По данной дроби, не превосходящей 1, найдите максимальную дробь с числителем, равным 1, не превосходящей данную.

На вход программе подаётся строка вида A/B, где A и B — натуральные числа, десятичная запись которых содержит не более 100 знаков.

Требуется вывести дробь вида 1/C, где \(\frac{1}{C}\) — максимальная дробь с числителем, равным 1, такая что \(\frac{1}{C}\leqslant\frac{A}{B}\).

Примеры

ВводВывод
2/5
1/3
1/4
1/4
23/101
1/5
45/46
1/2

R: Египетские дроби

Класс Fraction должен иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

Для класса Fraction определите конструктор, который может принимать следующие виды параметров:

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить метод __str__, который выводит a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Разложением дроби на сумму египетских дробей называется представление данной дроби в виде суммы дробей с числителем равным 1 и разными знаменателями (дроби с числителем равным 1 ещё называют аликвотными дробями).

Дана дробь, не превосходящая 1. Найти разложение данной дроби на сумму египетских дробей и вывести это разложение (см. примеры). Если разложений существует несколько, вывести любое.

На вход программе подаётся строка в формате, описанном в предыдущей задаче.

Программа должна вывести выражение — сумму различных аликвотных дробей или одну дробь, если заданная дробь является аликвотной. Значение выведенного выражения должна быть равно данной дроби.

Примеры

ВводВывод
2/5
1/3+1/15
3/7
1/3+1/11+1/231
1/13
1/13
5/121
1/25+1/757+1/763309+1/873960180913+1/1527612795642093418846225