我为二次方程制作了一个程序:
import math
print()
print("****Fórmula para ecuación de 2º Grado****")
print()
a = int(input("Introduzca primer miembro ="))
b = int(input("Introduzca segundo miembro ="))
c = int(input("Introduzca tercer miembro ="))
y = b ** 2 - 4 * a * c
math.sqrt(y)
r = math.sqrt(b ** 2 - 4 * a * c)
print(r)
x = (-b + r) / (2 * a)
print(x)
pause = input()
但是,我收到此错误:
error: Traceback (most recent call last): File "C:/Users/USUARIO/PycharmProjects/PY1/Ecuacion.py", line 9, in <module>
math.sqrt(y) ValueError: math domain error
我犯了什么错误?
该函数
math.sqrt()
仅适用于正参数。y
您可以在尝试计算根之前检查您的代码是否为正。如果不是,则方程没有实解:另一种可能性是使用模块
cmath
而不是math
. 该模块允许使用复数进行计算,因此即使方程没有实解,您也可以获得其复解:另一方面,如果解决方案是真实的,则此方法是“丑陋的”,因为在任何情况下它都会向您显示它是复杂的(尽管虚部等于 0)。
一个额外的细节,我会用
float(input(...))
代替int(input(...))
,因为为什么方程的系数必须是整数?如果我没记错的话,二次公式仅在平方根的内部为正时才返回实数值。
我不知道你在尝试什么值,但错误是因为
正在评估一个负数。在互联网上查找已经完成的示例,您会发现它运行良好。
另一种方法是使用 a
try
为这些错误做好准备