作爲一個項目,我從頭開始創建一個Rational Class,它可以將兩個分數作爲輸入並存儲簡化分數。但是,當我嘗試輸入兩個分數時,它似乎隱式使用整數除法,所以我根本無法存儲/操作分數。我是否錯誤地處理了這個問題?錯誤在哪裏?作爲合理的Python存儲分數
示例:Rational(3/2,9/2)返回(1,4)而不是(1/3)。
def gcd(numerator,denominator):
if numerator < 0:
absNum = -numerator
elif denominator < 0:
absDen = -denominator
else:
absNum = numerator
absDen = denominator
while absNum != absDen:
if absNum > absDen:
absNum = absNum - absDen
elif absDen >= absNum:
absDen = absDen - absNum
return(absNum)
class Rational:
def __init__(self,numerator=0,denominator=1):
self.numerator = numerator
self.denominator = denominator
if denominator == 0:
raise ZeroDivisionError("Error: cannot store number with 0 in denominator.")
elif denominator < 0:
if numerator < 0:
self.denominator = -denominator
self.numerator = -numerator
else:
self.numerator = numerator
self.denominator = -denominator
if numerator != 0:
com = gcd(numerator,denominator)
numerator = numerator/com
denominator = denominator/com
self.numerator = numerator
self.denominator = denominator
Rational(5/3,8/3)
返回(1,2)而不是(5,8),因爲它應該。編輯:下半場:我希望能夠輸入Rational(Rational(5/3),Rational(8/3))和(5,8)的結果。這似乎與上述略有不同。
雖然我認爲這是一個很好的練習來實現您自己的運算符,但您可以查看SymPy(http://docs.sympy.org)以獲取全功能符號計算庫。 – lmjohns3
檢查出來,非常有幫助 – AppliedNumbers