You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现一元二次方程求解时单解计算错误另一解正常问题求助

代码存在的问题
  • 求根公式参数错误:计算根时调用sqrt(b)完全不符合逻辑,一元二次方程求根需要开根号的是提前计算好的判别式d = b²-4ac,应改为sqrt(d),这是解计算错误的核心原因。
  • 分母硬编码错误:计算根时固定除以4,仅在当前a=2的场景下刚好匹配2a=4的要求,一旦a的取值变化,所有结果都会出错,正确的分母应该是2*a。
  • 重根场景运算顺序错误:当判别式d==0时,写法(-1 * b) / 2 * a遵循Python从左到右的乘除运算顺序,实际等价于(-b * a)/2,和正确公式-b/(2a)完全不符,需要给分母加括号改为(-1 * b) / (2 * a)。
  • 异常分支没有终止逻辑:d<0时仅打印了解不存在的提示,没有终止后续代码执行,此时程序还是会进入根计算逻辑,给自定义sqrt函数传入负数会返回None,后续数值运算会直接报错。
  • 自定义平方根函数冗余且不严谨:Python标准库math模块已有成熟的sqrt实现,无需自定义,你自定义的函数没有处理负数返回值的兼容逻辑,容易引发后续运算错误。
修正后的参考代码
import math

a = 2
b = 9
c = 4

d = (b ** 2) - 4 * a * c
print(f"判别式d的值为: {d}")

if d < 0:
    print('x不存在实根')
elif d == 0:
    x = (-1 * b) / (2 * a)
    print(f'唯一解为: {round(x, 2)}')
else:
    print('x存在两个实根')
    sqrt_d = math.sqrt(d)
    x_1 = (-1 * b - sqrt_d) / (2 * a)
    x_2 = (-1 * b + sqrt_d) / (2 * a)
    print(f'solution 1 is: {round(x_1, 2)}, solution 2 is: {round(x_2, 2)}')

内容的提问来源于stack exchange,提问作者Luka Morchiladze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:36:04