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

如何用print格式化复数类输出?复数作业输出格式优化问询

解决复数类的输出格式问题

我来帮你搞定这个复数类的输出格式问题!根据你给出的示例,我们需要针对不同场景调整输出逻辑,核心是在复数类中实现自定义的__str__方法来控制显示,同时单独处理除法除以零的特殊情况。

完整的复数类实现

class ComplexNumber:
    def __init__(self, real, imag):
        # 统一转成float,确保整数输入也能输出带.0的格式
        self.real = float(real)
        self.imag = float(imag)
    
    def __add__(self, other):
        return ComplexNumber(self.real + other.real, self.imag + other.imag)
    
    def __sub__(self, other):
        return ComplexNumber(self.real - other.real, self.imag - other.imag)
    
    def __mul__(self, other):
        # 复数乘法公式:(a+bi)(c+di) = (ac-bd)+(ad+bc)i
        real_part = self.real * other.real - self.imag * other.imag
        imag_part = self.real * other.imag + self.imag * other.real
        return ComplexNumber(real_part, imag_part)
    
    def __truediv__(self, other):
        # 先判断除数是否为0复数(实部虚部都为0)
        if other.real == 0 and other.imag == 0:
            return None  # 标记为无效除法
        # 复数除法公式:(a+bi)/(c+di) = [(ac+bd)+(bc-ad)i]/(c²+d²)
        denominator = other.real**2 + other.imag**2
        real_part = (self.real * other.real + self.imag * other.imag) / denominator
        imag_part = (self.imag * other.real - self.real * other.imag) / denominator
        return ComplexNumber(real_part, imag_part)
    
    def __str__(self):
        # 虚部为0时,只显示实部
        if self.imag == 0:
            return f"{self.real}"
        # 实部为0时,只显示虚部+i
        elif self.real == 0:
            return f"{self.imag}i"
        # 正常情况:实部+虚部i
        else:
            return f"{self.real}+{self.imag}i"

测试代码(模拟你的输入场景)

# 获取用户输入
real1 = float(input("输入第一个复数的实部:"))
imag1 = float(input("输入第一个复数的虚部:"))
real2 = float(input("输入第二个复数的实部:"))
imag2 = float(input("输入第二个复数的虚部:"))

# 创建复数对象
c1 = ComplexNumber(real1, imag1)
c2 = ComplexNumber(real2, imag2)

# 按要求格式输出结果
print(f"C1 = {c1}")
print(f"C2 = {c2}")
print(f"C1+C2 = {c1 + c2}")
print(f"C1-C2 = {c1 - c2}")
print(f"C1*C2 = {c1 * c2}")

# 处理除法的特殊情况
div_result = c1 / c2
if div_result is None:
    print("C1/C2 = None; Divide by Zero")
else:
    print(f"C1/C2 = {div_result}")

关键逻辑解释

  1. 统一转为float类型:在初始化时把实部和虚部都转成float,这样即使输入整数,输出也会显示成5.0这种带小数的格式,完全匹配示例要求。
  2. __str__方法的格式判断:
    • 当虚部为0时,只输出实部(比如示例中的C2,实部虚部都为0,就显示0)
    • 当实部为0但虚部不为0时,输出X.0i格式
    • 正常复数输出X.0+Y.0i格式
  3. 除法的特殊处理:在除法方法中先判断除数是否为0复数,若是则返回None,后续打印时专门捕获这个情况,输出指定的错误文本。

运行这段代码后,就能得到和你示例完全一致的输出效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:40:52