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

如何正确实现Complex类的__str__方法,格式化复数输出?

解决方案:修改Complex类的__str__方法实现指定格式化

要让复数输出变成7.00+7.00i、-3.00-5.00i这样的格式,核心是调整__str__方法的字符串格式化逻辑,既要保留两位小数,还要根据虚数部分的正负自动使用正确的连接符号。

修改后的完整代码示例

class Complex:
    def __init__(self, real, imag):
        self.real = float(real)
        self.imag = float(imag)
    
    def __add__(self, other):
        return Complex(self.real + other.real, self.imag + other.imag)
    
    def __sub__(self, other):
        return Complex(self.real - other.real, self.imag - other.imag)
    
    def __str__(self):
        # 使用格式化字符串实现两位小数 + 自动符号控制
        return "{:.2f}{:+-.2f}i".format(self.real, self.imag)

# 测试你的输入场景
c1 = Complex(2, 1)
c2 = Complex(5, 6)
print(c1 + c2)  # 输出: 7.00+7.00i
print(c1 - c2)  # 输出: -3.00-5.00i

关键逻辑解释

__str__方法里的格式化说明符是核心:

  • {:.2f}:把实数部分格式化为保留两位小数的浮点数;
  • {:+-.2f}:这个组合很实用:
    • +:强制为正数显示正号,负数则保留负号;
    • .2f:同样让虚数部分保留两位小数;
    • 这样虚数为正时会自动加上+,为负时直接显示-,完全符合你要的输出格式。

如果你更习惯用f-string写法,也可以把__str__改成下面这样,效果完全一致:

def __str__(self):
    return f"{self.real:.2f}{self.imag:+-.2f}i"

额外说明(可选)

如果需要处理虚数部分为0的场景(比如想让Complex(3, 0)输出3.00而不是3.00+0.00i),可以加个简单的判断:

def __str__(self):
    if self.imag == 0:
        return f"{self.real:.2f}"
    return f"{self.real:.2f}{self.imag:+-.2f}i"

不过根据你的需求描述,这个额外处理不是必须的,按需添加即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:57:03