【问题标题】:How to reduce a fraction within a class?如何减少班级内的分数?
【发布时间】:2022-11-17 04:12:30
【问题描述】:

我正在尝试 reduce(self) 以返回具有最低值的分数。

这是我的代码:

class fraction:
    def __init__(self,numerator,denominator):
        self.numerator = numerator
        self.denominator = denominator
        self.reduce()
    def get_numerator(self):
        return self.numerator

    def get_denominator(self):
        return self.denominator

    def reduce(self):
        pass

    def __str__(self):
        return str(self.numerator) + "/" + str(self.denominator)

这是测试代码:

# y = fraction(2*7,7*2)
# z = fraction(13,14)
# a = fraction(13*2*7,14)
# print(x)
# print(y)
# print(z)
# print(a)

我不想使用 math.gcd 或导入分数,而是手动完成。

如果没有这些操作员,我不确定该尝试什么。这可能是一个 while 循环吗?

【问题讨论】:

标签: python


【解决方案1】:

您可以使用Greatest Common Divisor 实现reduce()。正如@NickODell 所说in comment 此 GCD 算法在 Euclidean Algorithm Wiki 中进行了描述。并在下面的代码中实现:

Try it online!

class fraction:
    def __init__(self, numerator, denominator):
        self.numerator = numerator
        self.denominator = denominator
        self.reduce()

    def get_numerator(self):
        return self.numerator

    def get_denominator(self):
        return self.denominator

    @staticmethod
    def gcd(a, b):
        while b != 0:
            a, b = b, a % b
        return a

    def reduce(self):
        if self.numerator == 0 or self.denominator == 0:
            return
        g = self.gcd(self.numerator, self.denominator)
        self.numerator //= g
        self.denominator //= g

    def __str__(self):
        return str(self.numerator) + "/" + str(self.denominator)

y = fraction(2*7,7*2)
z = fraction(13,14)
a = fraction(13*2*7,14)
print(y)
print(z)
print(a)
print(fraction(15, 35))

输出:

1/1
13/14
13/1
3/7

【讨论】:

  • 不要为 OP 编写代码。
猜你喜欢
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多