Я пытаюсь построить класс рациональных чисел, который будет выполнять различные арифметические функции на основе входных значений без использования модуля fractions
. Когда я использую две разные фракции, код работает нормально, но как только я пытаюсь использовать целое число, я получаю ошибки в более ранних функциях класса и не знаю, почему. То, что я пытаюсь реализовать на этом этапе, - это снова добавить целое число в рациональное число (например, print Rational(1,2) * 3
).Умножая числа и целые числа в Python
Я включил код, который у меня до сих пор ниже - проблемная операция __radd__
, хотя, когда это включено в мой код, я получаю ошибку атрибута для __add__
(эта ошибка не появляется, пока эта новая операция не будет отображаться входит в комплект). Я предполагаю, что проблема связана с тем, что все еще имеет параметр 2 __radd__
как другой (предполагая другой случай класса Rational?), Но я не уверен, как это сделать.
Редактировать: Я использую Python 2.7. Ошибка из прогона образца включена ниже кода.
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a%b)
class Rational:
def __init__(self, nom, denom):
if denom == 0:
raise ZeroDivisionError, ("Cannot divide by zero!")
else:
self.reduce = gcd(nom, denom)
self.nom = nom/self.reduce
self.denom = denom/self.reduce
def __add__ (self, other):
return Rational(self.nom*other.denom+other.nom*self.denom, self.denom*other.denom)
def __sub__ (self, other):
return Rational(self.nom * other.denom - other.nom * self.denom,self.denom * other.denom)
def __mul__ (self, other):
return Rational(self.nom * other.nom, self.denom * other.denom)
def __div__ (self, other):
return Rational(self.nom * other.denom, self.denom * other.nom)
def __radd__ (self, other):
return Rational(self.nom*1+other*self.denom, self.denom*1)
def __str__ (self):
return str(self.nom) + "/" + str(self.denom)
ошибка выборки
print Rational(1,2) + 1
AttributeError Traceback (most recent call last)
<ipython-input-201-1ccb1fc0dfef> in <module>()
----> 1 print Rational(1,2) + 1
C:\Users\turk\Documents\EV_HW6_P2.py in __add__(self, other)
13 self.denom = denom/self.reduce
14 def __add__ (self, other):
---> 15 return Rational(self.nom*other.denom+other.nom*self.denom, self.denom*other.denom)
16 def __sub__ (self, other):
17 return Rational(self.nom * other.denom - other.nom * self.denom,self.denom * other.denom)
AttributeError: 'int' object has no attribute 'denom'
Пожалуйста, покажите полная ошибка трассировки и вызов, который приводит к этой ошибке. Вы также можете указать, используете ли вы Python 2, Python 3 или «из __future__ import division», поскольку это будет иметь здесь большое значение (или, возможно, просто используйте '//' вместо '/', предполагая, что вы нужны целые деления). – Evert
Добавлено, спасибо за предложения. – turkadactyl
'Rational (1,2) + 1' использует' __add__', '1 + Rational (1,2)' использует '__radd__' – furas