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

Python编写solve_quadratic求解一元二次方程返回小数及报错咨询

问题原因

  • 小数返回问题:Python 3中/运算符默认执行浮点数除法,哪怕运算结果为整数也会返回带.0后缀的浮点数类型,和预期的整数结果格式不符。
  • 报错问题:代码没有处理判别式d < 0的情况,math.sqrt()仅支持对非负实数开根号,传入负数会直接抛出ValueError异常。另外代码中对b*b和4*a*c强制转int的逻辑存在隐患,如果传入的系数是浮点数,强转操作会丢失精度,导致判别式计算错误。

修复方案

  • 除法如果要得到整数结果可以用//,但更通用的做法是支持同时返回整数/浮点数/复数解,建议改用cmath模块替代math模块,支持负数开根号得到复数结果。
  • 移除不必要的int强转逻辑,保证判别式计算精度。
  • 新增结果格式化逻辑,当解为整数时自动转成int类型,符合预期输出格式。

修复后代码

import cmath

def solve_quadratic(a, b, c):
    # 计算判别式,移除不必要的int强转
    d = b*b - 4*a*c
    sol1 = (-b - cmath.sqrt(d)) / (2*a)
    sol2 = (-b + cmath.sqrt(d)) / (2*a)
    # 格式化结果:整数解转int,非整数保留原类型
    def format_num(x):
        if x.imag == 0:
            real = x.real
            return int(real) if real.is_integer() else real
        return x
    tup = (format_num(sol1), format_num(sol2))
    print(tup)
    return tup

def main():
    solve_quadratic(1, -3, 2)
    solve_quadratic(1, 2, 1)
    # 测试虚数解场景不会报错
    solve_quadratic(1, 2, 5)

if __name__ == "__main__":
    main()

运行输出

(1, 2)
(-1, -1)
((-1-2j), (-1+2j))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:48:04