Что нужно сделать, чтобы заработал «from Rational import *» для класса?

class Rational:
    def __init__ (self, n, m):
        while n != 0 or m != 0:
            if n > m:
                n = n % m
            else:
                m = m % n
        self.nod = m + n
        self.nomin = self.nomin // self.nod
        self.denom = self.denom // self.nod
    def NOD (self, n, m):
        while n != 0 or m != 0:
            if n > m:
                n = n % m
            else:
                m = m % n
        self.nod = m + n
        self.nomin = self.nomin // self.nod
        self.denom = self.denom // self.nod
        return self.nomin, self.denom
    def add(self, r):
        if self.denom == r.denom:
            self.nomin += r.nomin
        else:
            self.denom *= r.denom
            self.nomin *= r.denom
            r.nomin *= self.denom
            self.nomin += r.nomin
            self.nomin, self.denom = self.NOD(self.nomin, self.denom)
        return (self.nomin, "/", self.denom)
    
from Rational import *
a = Rational(input(), input())
b = Rational(input(), input())

print("сложение а+b= ", a.add(b))

Суть программы сложить рациональные числа и вывести результат. Ошибка сразу выдается там где import, а если эту строку убрать то лучше не становится. Помогите пожалуйста
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
@Andy_U
0) import тут действительно лишний.

1) У вас неправильно вычисляется наибольший общий делитель. Школу я закончил очень давно, а разбираться лень. Есть же math.gcd().

2) 2 аналогичных ошибки в конце __init__: Вы в правой части используете еще не определенные self.nomin и self.denom

3) Метод NOD зачем-то в процессе модифицирует члены класс и их же возвращает? Или крестик, или трусы.

4) Сложение дробей у вас тоже неправильное: знаменатель надо в самом конце модифицировать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы