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

二次方程求解程序:输入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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:52:20