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

自定义Fraction类遇问题:/、>、<运算符无法正常工作求助

解决你的Fraction类运算符问题

嘿,我瞅了下你的代码,问题很明确——你只实现了加法和字符串输出的魔法方法,但除法(/)、大于(>)、小于(<)对应的运算符魔法方法完全没定义,而且你的加法方法还没写完呢!来一步步给你修正:

首先先把你原代码里的问题点列出来:

  • __add__ 方法只算了新分子分母,但没有用gcd约分,也没有返回新的Fraction实例
  • 缺少处理 / 运算符的 __truediv__ 方法
  • 缺少处理 > 的 __gt__ 和 < 的 __lt__ 比较方法

下面是修正后的完整代码,每部分都加了注释:

def gcd(m, n):
    while m % n != 0:
        m, n = n, m % n
    return n

class Fraction:
    '''Fractional class'''
    def __init__(self, num, denom):
        # 初始化时先约分,避免后续运算冗余,同时确保分母为正
        common = gcd(num, denom)
        self.num = num // common
        self.denom = denom // common
        if self.denom < 0:
            self.num *= -1
            self.denom *= -1

    def __str__(self):
        return f"{self.num}/{self.denom}"

    def __add__(self, other):
        # 计算加法后的分子分母
        new_num = self.num * other.denom + other.num * self.denom
        new_denom = self.denom * other.denom
        # 返回约分后的新Fraction实例
        return Fraction(new_num, new_denom)

    def __truediv__(self, other):
        # 分数除法:乘以除数的倒数
        new_num = self.num * other.denom
        new_denom = self.denom * other.num
        return Fraction(new_num, new_denom)

    def __gt__(self, other):
        # 交叉相乘比较,避免浮点精度问题
        return self.num * other.denom > other.num * self.denom

    def __lt__(self, other):
        return self.num * other.denom < other.num * self.denom

    # 可选:补充等于运算符,让比较更完整
    def __eq__(self, other):
        return self.num * other.denom == other.num * self.denom

代码解释:

  1. 初始化方法优化:创建分数时就先约分,并且把分母转为正数,避免后续运算出现负分母的混乱
  2. __truediv__ 方法:处理 / 运算符,本质是把除法转为乘法(乘以另一个分数的倒数),然后返回约分后的新分数
  3. __gt__ 和 __lt__ 方法:用交叉相乘的方式比较大小,这样不会因为转成浮点数丢失精度(比如1/3和3/9直接转浮点数可能有误差,但交叉相乘就完全准确)
  4. 补全__add__:最后返回了新的Fraction实例,并且利用初始化时的约分逻辑自动简化结果

测试示例:

f1 = Fraction(1, 2)
f2 = Fraction(3, 4)

# 测试加法
print(f1 + f2)  # 输出 5/4
# 测试除法
print(f1 / f2)  # 输出 2/3
# 测试比较
print(f1 > f2)  # 输出 False
print(f1 < f2)  # 输出 True

这样你的运算符就都能正常工作啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:25:26