如何用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}")
关键逻辑解释
- 统一转为float类型:在初始化时把实部和虚部都转成float,这样即使输入整数,输出也会显示成
5.0这种带小数的格式,完全匹配示例要求。 __str__方法的格式判断:- 当虚部为0时,只输出实部(比如示例中的C2,实部虚部都为0,就显示
0) - 当实部为0但虚部不为0时,输出
X.0i格式 - 正常复数输出
X.0+Y.0i格式
- 当虚部为0时,只输出实部(比如示例中的C2,实部虚部都为0,就显示
- 除法的特殊处理:在除法方法中先判断除数是否为0复数,若是则返回
None,后续打印时专门捕获这个情况,输出指定的错误文本。
运行这段代码后,就能得到和你示例完全一致的输出效果啦!
内容的提问来源于stack exchange,提问作者Michael Ung
相关产品推荐
相关产品推荐

