Классы и математические операции в них
Задача Создайте класс «Дробь». Необходимо хранить в полях класса: числитель и знаменатель. Реализуйте методы класса для ввода данных, вывода данных, реализуйте доступ к отдельным полям через методы класса. Также создайте методы класса для выполнения арифметических операций (сложение, вычитание, умножение, деление, и т.д.). Попытка написать код (гарантированно не правильная). Как правильно не понимаю
class Fraction():
def __init__(self, a, b, c):
self.numerator = a
self.denominator = b
self.result = c
def fraction(a, b):
if 0 < b:
print(a / b)
else:
print("Erorr")
def addition(a, b, i, c):
if 0 < i:
c = (a/b) + i
return c
AB = Fraction (15, 7, 4)
print(AB.addition())
Ответы (2 шт):
Автор решения: eri
→ Ссылка
class Fraction():
def __init__(self, numerator, denominator):
self.numerator = numerator
self.denominator = denominator
self.canonize()
@staticmethod
def fromstr(string):
return Fraction( * (int(i.strip()) for i in string.split('/')))
def canonize(self):
def gcd(a,b):
while a != 0 and b != 0:
if a > b:
a %= b
else:
b %= a
return a+b
g = gcd(self.numerator, self.denominator)
self.numerator //= g
self.denominator //= g
def __float__(self):
return self.numerator / self.denominator
def __trunc__(self):
return self.numerator // self.denominator
def __int__(self):
return self.__trunc__()
def __str__(self):
return f"{self.numerator}/{self.denominator}"
def __repr__(self):
return f"Fraction({str(self)})"
def __round__(self, ndigits=None, /):
return round(float(self), ndigits)
def __add__(self, value):
return Fraction(
self.numerator*value.denominator + value.numerator*self.denominator,
self.denominator*value.denominator
)
def __mul__(self, value):
return Fraction(
self.numerator*value.numerator,
self.denominator*value.denominator
)
def __neg__(self):
return Fraction(
-self.numerator,
self.denominator
)
def __sub__(self, value, /):
return Fraction(
self.numerator*value.denominator - value.numerator*self.denominator,
self.denominator*value.denominator
)
def __truediv__(self, value):
return Fraction(
self.numerator*value.denominator,
self.denominator*value.numerator
)
print( Fraction(5,7)/Fraction(1,5) + Fraction(7,11)*Fraction(11,7) )
print(Fraction.fromstr(input()))
Автор решения: S. Nick
→ Ссылка
Как вариант. Попробуйте:
class Fraction():
def __init__(self, a, b):
self.numerator = a
self.denominator = b
# self.result = c
def _input(self):
try:
a = int(input("\nВведите новое значение для 'a': "))
self.numerator = a
b = int(input("Введите новое значение для 'b': "))
self.denominator = b
rezult = f"a = {a}, b = {b}"
except:
rezult = "Erorr"
return rezult
def _fraction(self):
if self.denominator:
rezult = self.numerator / self.denominator
else:
rezult = "Erorr"
return rezult
def addition(self, i=0):
if 0 <= i and self.denominator:
rezult = (self.numerator / self.denominator) + i
return rezult
# a b
fraction = Fraction (15, 7)
print(f'\naddition() : {fraction.addition():>10.5f}')
print(f'addition(12): {fraction.addition(12):>10.5f}')
print(f'_fraction() : {fraction._fraction():>10.5f}')
print(f'\n_input() : {fraction._input()}')
print(f'_fraction : {fraction._fraction():>10.5f}')