如何正确实现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
相关产品推荐
相关产品推荐

