Python求解一元二次方程复数根时else分支代码编写问题
Python一元二次方程复数根求解修正方案
原有代码核心问题
- 运算顺序错误:
/2 * a等价于a/2,不符合求根公式的/(2*a)数学定义 - 复数场景下实部错误使用地板除
//,会导致非整数实部结果被截断失真 - 负数判别式直接取0.5次方得到的复数格式不符合常规的
a+bi书写习惯 - 若在负数场景调用
math.sqrt会直接抛出不支持负数输入的报错
修正后完整代码
while True: a = int(input("enter the number a:")) if a == 0: print("Cannot be 0!") continue b = int(input("enter the number b:")) c = int(input("enter the number c:")) print(f"Equation:{a}x^2+{b}x+{c}") discriminant = b ** 2 - 4 * a * c if discriminant > 0: root_disc = discriminant ** 0.5 root1 = (-b + root_disc) / (2 * a) root2 = (-b - root_disc) / (2 * a) print(root1, root2) elif discriminant == 0: root = (-b) / (2 * a) print(root) else: # 计算实部 real_part = (-b) / (2 * a) # 计算虚部系数(取判别式绝对值开根号) imag_part = (-discriminant) ** 0.5 / (2 * a) # 按常规复数书写格式输出 print(f"{real_part} + {imag_part}i") print(f"{real_part} - {imag_part}i") break
修改说明
- 统一调整了求根的运算顺序,把
/2 * a改为/(2 * a),匹配数学公式要求 - 复数分支单独拆分实部、虚部计算,输出格式符合日常读写习惯
- 虚部计算时先取判别式的绝对值开根号,避免出现多余的复数类型标识
内容的提问来源于stack exchange,提问作者mubb
相关产品推荐
相关产品推荐

