プロジェクトとして、入力として 2 つの分数を取り、単純化された分数を格納できる Rational クラスをゼロから作成しています。ただし、2 つの分数を入力しようとすると、暗黙的に整数除算を使用しているように見えるため、分数を保存/操作することはできません。私は問題に間違ってアプローチしていますか? 間違いはどこですか?
例: Rational(3/2,9/2) は、(1/3) ではなく (1,4) を返します。
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)
(5,8) の代わりに (1,2) を返します。編集: 後半: Rational(Rational(5/3),Rational(8/3)) を (5,8) で入力できるようにしたい。上記とは少し違うようです。