Python3 求解二次方程
一、二次方程求解核心原理
- 判别式判定根的类型:定义 Δ=b2−4ac,通过Δ的正负判断根的性质:
- 当 Δ>0:方程有两个不相等的实数根
- 当 Δ=0:方程有两个相等的实数根(重根)
- 当 Δ<0:方程有一对共轭复数根
- 求根公式:无论实根还是复根,均满足求根公式 x=2a−b±Δ,Python 中通过
cmath模块可直接处理复数平方根计算,无需额外判断。
二、完整代码实例(交互式输入,支持所有根场景)
该实例支持用户手动输入二次项系数a、一次项系数b、常数项c,自动判定根的类型并输出结果,同时处理a=0的异常情况。
# 导入复数数学库,用于处理负数平方根(兼容复根求解)
import cmath
def solve_quadratic_equation():
try:
# 1. 交互式输入三个系数,转换为浮点数
a = float(input("请输入二次项系数 a(a ≠ 0):"))
b = float(input("请输入一次项系数 b:"))
c = float(input("请输入常数项 c:"))
# 2. 判断a是否为0,若为0则不是二次方程
if a == 0:
print("错误:a 不能为 0,这不是二次方程!")
return
# 3. 计算判别式 Δ = b² - 4ac
delta = b ** 2 - 4 * a * c
# 4. 根据求根公式计算两个根
x1 = (-b + cmath.sqrt(delta)) / (2 * a)
x2 = (-b - cmath.sqrt(delta)) / (2 * a)
# 5. 判定根的类型并输出结果
print("\n二次方程 {}x² + {}x + {} = 0 的求解结果:".format(a, b, c))
if delta > 0:
# Δ>0:两个不相等实数根
print("根的类型:两个不相等的实数根")
print("x1 =", x1.real) # 取实数部分输出,更简洁
print("x2 =", x2.real)
elif delta == 0:
# Δ=0:两个相等实数根(重根)
print("根的类型:两个相等的实数根(重根)")
print("x1 = x2 =", x1.real)
else:
# Δ<0:一对共轭复数根
print("根的类型:一对共轭复数根")
print("x1 =", x1)
print("x2 =", x2)
except ValueError:
# 捕获非数字输入的异常
print("错误:请输入有效的数字!")
# 调用函数执行求解
if __name__ == "__main__":
solve_quadratic_equation()
三、三种场景测试示例
场景 1:Δ>0(两个不相等实数根)
输入:
请输入二次项系数 a(a ≠ 0):1
请输入一次项系数 b:-5
请输入常数项 c:6
输出:
二次方程 1.0x² + -5.0x + 6.0 = 0 的求解结果:
根的类型:两个不相等的实数根
x1 = 3.0
x2 = 2.0
场景 2:Δ=0(两个相等实数根)
输入:
请输入二次项系数 a(a ≠ 0):1
请输入一次项系数 b:4
请输入常数项 c:4
输出:
二次方程 1.0x² + 4.0x + 4.0 = 0 的求解结果:
根的类型:两个相等的实数根(重根)
x1 = x2 = -2.0
场景 3:Δ<0(一对共轭复数根)
输入:
请输入二次项系数 a(a ≠ 0):1
请输入一次项系数 b:2
请输入常数项 c:5
输出:
二次方程 1.0x² + 2.0x + 5.0 = 0 的求解结果:
根的类型:一对共轭复数根
x1 = (-1+2j)
x2 = (-1-2j)
浙公网安备 33010602011771号