将分数存储为Rational Python

2024-10-02 02:43:43 发布

您现在位置:Python中文网/ 问答频道 /正文

作为一个项目,我从头开始创建一个Rational类,它可以将两个分数作为输入并存储简化的分数。但是,当我试图输入两个分数时,它似乎隐式地使用整数除法,因此我根本无法存储/操作分数。我处理问题的方法有误吗?哪里出错了?在

示例: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)。 编辑:下半部分:我希望能够输入有理(5/3),有理(8/3))与(5,8)的结果。这似乎与上述略有不同。在


Tags: 项目selfcomifdef整数else分数
2条回答
from __future__ import division

将解决分割问题。在

旁注-如果你想要你的有理数被精确地存储,你应该确保分子和分母都被存储为整数。如果我没看错,你的gcd函数就不能用float了。在

要解决此问题,您可能需要执行以下操作:

^{pr2}$

它不是变量的存储,而是实例化类的表达式。如果使用两个整数,它将隐式使用整数除法。您应该使用分数或使用float()函数。在

我的有理数=有理数(3.0/2,9.0/2)

my_other_rational=有理(float(3)/2,float(9)/2)

编辑:在Python3.x中不再是这样了。参见:http://www.python.org/dev/peps/pep-0238/

相关问题 更多 >

    热门问题