二次方程求解程序:输入1,4,3正常,2.5,-1.5,1.5报错的修复方案
二次方程求解代码报错分析与修复
报错原因分析
输入2.5,-1.5,1.5时,计算判别式b²-4ac得:(-1.5)² - 4*2.5*1.5 = 2.25 - 15 = -12.75。原代码直接调用math.sqrt()计算负数的平方根,会触发ValueError: math domain error——因为实数范围内负数无法开平方,且代码在开平方前未先判断判别式的正负。
此外原代码还有其他问题:
math模块导入位置不合理,放在函数中间不符合编码规范- 求根公式缺少除以
2a的关键步骤,无法得到正确解 - 变量命名混乱(用
c接收输入字符串,和系数c重名) - 仅判断能否用公式,未输出方程的解
- 未处理输入格式错误的情况
修复后的代码
import math def run(): input_str = input('Enter coefficients a, b, c :') # 处理输入中可能存在的空格,兼容带空格的输入格式 parts = [x.strip() for x in input_str.split(',')] # 捕获输入格式错误 try: a = float(parts[0]) b = float(parts[1]) c = float(parts[2]) except (ValueError, IndexError): print("输入格式错误,请输入三个用逗号分隔的数字(示例:1,4,3)") return # 判断是否为二次方程 if a == 0: print("a不能为0,这不是二次方程") return # 计算判别式 discriminant = b**2 - 4*a*c # 判断是否可用求根公式并计算解 if discriminant >= 0: print("Can use quadratic formula: True") sqrt_d = math.sqrt(discriminant) x1 = (-b - sqrt_d) / (2*a) x2 = (-b + sqrt_d) / (2*a) print(f"方程的实数解:x1 = {x1:.2f}, x2 = {x2:.2f}") else: print("Can use quadratic formula: False") print("判别式为负数,无实数解") run()
修复说明
- 将
math模块移到全局导入,符合Python编码规范 - 处理输入时自动去除每个参数的空格,兼容
2.5, -1.5, 1.5这类带空格的输入 - 添加异常捕获,处理非数字输入、参数数量不足等错误
- 先判断
a是否为0,排除非二次方程的情况 - 先计算判别式,确认非负后再调用开平方操作,避免定义域错误
- 补充求根公式中除以
2a的步骤,得到正确的方程解 - 优化变量命名,避免重名混淆
- 增加明确的错误提示和结果输出,提升程序可用性
内容的提问来源于stack exchange,提问作者wolfwolf
相关产品推荐
相关产品推荐

