You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python类中手动实现分数约分功能?

手动实现分数化简的reduce方法

完全可以用while循环来实现,核心是用**欧几里得算法(辗转相除法)**手动计算分子和分母的最大公约数(GCD),再用分子分母分别除以这个公约数得到最简分数,同时还要处理符号问题保证分母始终为正数。

完整实现代码

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):
        # 处理符号,确保分母为正
        if self.denominator < 0:
            self.numerator = -self.numerator
            self.denominator = -self.denominator
        
        # 用while循环实现辗转相除法求最大公约数
        a = abs(self.numerator)
        b = abs(self.denominator)
        while b != 0:
            a, b = b, a % b
        gcd = a
        
        # 分子分母除以最大公约数完成化简
        self.numerator = self.numerator // gcd
        self.denominator = self.denominator // gcd

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

测试验证

补充完整测试代码后运行:

x = fraction(4,6)
y = fraction(2*7,7*2)
z = fraction(13,14)
a = fraction(13*2*7,14)
print(x)   # 输出:2/3
print(y)   # 输出:1/1
print(z)   # 输出:13/14
print(a)   # 输出:13/1

关键逻辑说明

  • 符号处理:如果分母为负,同时翻转分子和分母的符号,保证分数表示统一(比如3/-4转为-3/4,-3/-4转为3/4)。
  • 辗转相除法的while循环实现:通过不断取余数迭代,直到余数为0,此时的被除数就是最大公约数,迭代方式比递归更稳定,避免深度问题。
  • 化简操作:用整数除法//保证分子分母除以最大公约数后仍为整数,得到最简分数形式。

内容的提问来源于stack exchange,提问作者vanillapillow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:01:14