Перегрузка операторов
Напишем класс Drob для представления дробей вида a/b
class Drob:
def __init__(self, a, b):
# a/b
self.a = a # числитель
self.b = b # знаменатель
# чтобы дробь можно было напечатать
def __repr__(self):
return f'{self.a}/{self.b}'
# класс закончился, можно его использовать
d1 = Drob(1, 2) # создали новую дробь 1/2
print(d1) # 1/2
d2 = Drob(1, 6) # создали новую дробь 1/6
print(d6) # 1/6
Хочу уметь считать дроби, как в математике (1/2 + 1/6)*3/10
Чтобы две дроби умели d1 + d2 нужно определить функцию
__add__
class Drob:
def __init__(self, a, b):
# a/b
self.a = a # числитель
self.b = b # знаменатель
def __repr__(self):
return f'{self.a}/{self.b}'
def __add__(self, other):
# dres = d1.__add__(d2) когда dres = d1 + d2
a = self.a
b = self.b
c = other.a
d = other.b
x = a * d + c * b
y = b * d
# не меняем ни дробь self, ни дробь other
# создаем новую дробь
res = Drob( x, y)
return res # возвращаем эту новую дробь
# класс закончился, можно его использовать
d1 = Drob(1, 2) # создали новую дробь 1/2
print(d1) # 1/2
d2 = Drob(1, 6) # создали новую дробь 1/6
print(d6) # 1/6
dres = d1 + d2 # dres = d1.__add__(d2)
print(dres) # 8/12
a = [d1, d2, d3]
print(a) # [1/2, 1/6, 8/12]
for d in a:
print(d)
Так же можно написать функцию
__lt__ в классе Drob и будет работать оператор <
if d1 < d2:
print(f'{d1} меньше {d2}')
else:
print(f'{d1} НЕ меньше {d2}')
Таблица операторов
Арифметические операторы
Оператор | Функция |
+ | __add__ |
- | __sub__ |
* | __mul__ |
/ | __truediv__ |
// | __floordiv__ |
Операторы сравнения
Задача 1
Реализовать арифметические операторы и проверить их работу. Варианты:
- *
- /
- -
- +
Задача 2
Вычислить значение выражения (1/2 + 1/6) * 3/10
Задача 3
Реализовать логические операторы и проверить их работу. Варианты:
- ==
- <
- >
- ≥
Задача 4
В файле data.txt даны дроби
- Вариант 1. Найти произведение всех дробей
- Вариант 2. Найти наименьшую дробь (min)
- Вариант 3. Найти наибольшую дробь (max)
- Вариант 4. Найти сумму всех дробей
--
TatyanaDerbysheva - 25 Feb 2020