1

プロジェクトとして、入力として 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) で入力できるようにしたい。上記とは少し違うようです。

4

2 に答える 2

0

変数のストレージではなく、クラスをインスタンス化する式です。2 つの整数を使用すると、暗黙的に整数除算が使用されます。分数を使用するか、float() 関数を使用する必要があります。

my_rational = 合理的 (3.0/2,9.0/2)

my_other_rational = Rational(float(3)/2,float(9)/2)

編集: Python 3.x では、そうではなくなりました。参照: http://www.python.org/dev/peps/pep-0238/

于 2013-08-02T19:16:10.537 に答える