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
相关产品推荐
相关产品推荐

