Python 二次方程
二次方程的形式为:ax2+bx+c=0。
其解可以通过求判别式 决定:
- 如果 ,方程有两个实数根。
- 如果 ,方程有一个实数根(双重根)。
- 如果 ,方程没有实数根,但有两个复数根。
以下实例为通过用户输入数字,并计算二次方程:
实例(Python 3.0+)
# Filename: quadratic_solver.py
# Author: www.runoob.com (优化 by ChatGPT)
# 程序功能: 求解二次方程 ax**2 + bx + c = 0
# 注意: a ≠ 0,a、b、c 为用户输入的实数
import cmath # 导入 cmath 模块,支持复数运算
def get_float_input(prompt):
"""
获取用户输入的浮点数,并处理非法输入。
:param prompt: 提示信息
:return: 用户输入的浮点数
"""
while True:
try:
return float(input(prompt))
except ValueError:
print("请输入有效的数字!")
def solve_quadratic(a, b, c):
"""
计算二次方程的解。
:param a: 二次项系数
:param b: 一次项系数
:param c: 常数项
:return: 二次方程的两个解
"""
discriminant = b**2 - 4*a*c # 计算判别式
root1 = (-b - cmath.sqrt(discriminant)) / (2 * a)
root2 = (-b + cmath.sqrt(discriminant)) / (2 * a)
return root1, root2
def main():
print("求解二次方程 ax^2 + bx + c = 0")
# 获取用户输入
a = get_float_input("请输入二次项系数 a(a ≠ 0):")
while a == 0:
print("二次方程的二次项系数 a 不能为 0!")
a = get_float_input("请重新输入二次项系数 a(a ≠ 0):")
b = get_float_input("请输入一次项系数 b:")
c = get_float_input("请输入常数项 c:")
# 计算并输出结果
root1, root2 = solve_quadratic(a, b, c)
print(f"方程的解为:{root1} 和 {root2}")
if __name__ == "__main__":
main()
执行以上代码输出结果为:
求解二次方程 ax^2 + bx + c = 0 请输入二次项系数 a(a ≠ 0):1 请输入一次项系数 b:5 请输入常数项 c:6 方程的解为:(-3+0j) 和 (-2+0j)
该实例中,我们使用了 cmath (complex math) 模块的 sqrt() 方法 来计算平方根。
实例 2
import math
import cmath
def solve_quadratic(a, b, c):
"""
求解二次方程 ax^2 + bx + c = 0
:param a: 二次项系数
:param b: 一次项系数
:param c: 常数项
:return: 方程的解(可能为实数或复数)
"""
if a == 0:
# 非二次方程处理
if b == 0:
return "无解" if c != 0 else "方程有无穷多个解"
return f"方程是线性方程,解为 x = {-c / b}"
# 计算判别式
delta = b**2 - 4*a*c
if delta > 0:
# 两个实数根
root1 = (-b + math.sqrt(delta)) / (2 * a)
root2 = (-b - math.sqrt(delta)) / (2 * a)
return f"方程有两个实数根:x1 = {root1}, x2 = {root2}"
elif delta == 0:
# 一个实数根
root = -b / (2 * a)
return f"方程有一个双重实数根:x = {root}"
else:
# 两个复数根
root1 = (-b + cmath.sqrt(delta)) / (2 * a)
root2 = (-b - cmath.sqrt(delta)) / (2 * a)
return f"方程有两个复数根:x1 = {root1}, x2 = {root2}"
# 示例调用
a, b, c = 1, -3, 2
result = solve_quadratic(a, b, c)
print(result)
import cmath
def solve_quadratic(a, b, c):
"""
求解二次方程 ax^2 + bx + c = 0
:param a: 二次项系数
:param b: 一次项系数
:param c: 常数项
:return: 方程的解(可能为实数或复数)
"""
if a == 0:
# 非二次方程处理
if b == 0:
return "无解" if c != 0 else "方程有无穷多个解"
return f"方程是线性方程,解为 x = {-c / b}"
# 计算判别式
delta = b**2 - 4*a*c
if delta > 0:
# 两个实数根
root1 = (-b + math.sqrt(delta)) / (2 * a)
root2 = (-b - math.sqrt(delta)) / (2 * a)
return f"方程有两个实数根:x1 = {root1}, x2 = {root2}"
elif delta == 0:
# 一个实数根
root = -b / (2 * a)
return f"方程有一个双重实数根:x = {root}"
else:
# 两个复数根
root1 = (-b + cmath.sqrt(delta)) / (2 * a)
root2 = (-b - cmath.sqrt(delta)) / (2 * a)
return f"方程有两个复数根:x1 = {root1}, x2 = {root2}"
# 示例调用
a, b, c = 1, -3, 2
result = solve_quadratic(a, b, c)
print(result)