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

Python二次方程求解脚本出现math domain error问题求助

解决二次方程求解脚本中的math domain error问题

嘿,我一眼就揪出问题所在啦!你碰到的ValueError: math domain error,根源是**math.sqrt()函数没法对负数取平方根**——在实数范围内,负数没有平方根,而你代码里的判别式b_squared_minus_four_a_c此时是负数,直接给sqrt()传进去就触发了这个错误。

先把你给出的错误信息整理出来:

Traceback (most recent call last):
File "/private/var/mobile/Containers/Shared/AppGroup/C692DE78-B0DD-44FF-9815-4675E6956B0A/Pythonista3/Documents/quadratic solver.py", line 13, in
root_b_squared_minus_four_a_c = sqrt(b_squared_minus_four_a_c)
ValueError: math domain error

给你两种靠谱的解决方案:

  • 思路1:只处理实数根:先判断判别式的正负,小于0时直接提示用户没有实数解
  • 思路2:支持复数根:改用cmath模块,它能处理复数运算,返回复数形式的根

下面是两种方案的代码示例:

方案1:仅返回实数根

from math import sqrt

# 这里替换成你获取a、b、c的逻辑,比如用户输入
a = float(input("请输入a的值:"))
b = float(input("请输入b的值:"))
c = float(input("请输入c的值:"))

discriminant = b**2 - 4*a*c

if discriminant < 0:
    print("这个二次方程没有实数根哦!")
else:
    sqrt_discriminant = sqrt(discriminant)
    root1 = (-b + sqrt_discriminant) / (2*a)
    root2 = (-b - sqrt_discriminant) / (2*a)
    print(f"方程的实数根是:{root1} 和 {root2}")

方案2:支持复数根

from cmath import sqrt  # 替换成cmath的sqrt,支持复数运算

a = float(input("请输入a的值:"))
b = float(input("请输入b的值:"))
c = float(input("请输入c的值:"))

discriminant = b**2 - 4*a*c
sqrt_discriminant = sqrt(discriminant)

root1 = (-b + sqrt_discriminant) / (2*a)
root2 = (-b - sqrt_discriminant) / (2*a)
print(f"方程的根是:{root1} 和 {root2}")

这样修改后,不管判别式是正还是负,脚本都能正常运行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:23:03