python数学域错误 - sqrt

时间:2015-03-31 18:36:43

标签: python math dns sqrt

导致问题的原因是什么?

from math import sqrt
print "a : "
a = float(raw_input())
print "b : "
b = float(raw_input())
print "c : "
c = float(raw_input())
d = (a + b + c)/2
s = sqrt(d*(d-a)*(d-b)*(d-c))
print "a+b+c =", a, b, c
print "Distr. =", d*2, "Area =", s

错误:

Traceback (most recent call last):
   File "C:/Python27/fájlok/háromszög terület2.py", line 11, in <module>
       s = sqrt(d*(d-a)*(d-b)*(d-c))
ValueError: math domain error

5 个答案:

答案 0 :(得分:4)

问题是只有当两个数字的总和大于第三个时,Heron's formula才有效。你需要明确检查。

使用代码执行此操作的更好方法是使用异常处理

try:
    s = sqrt(d*(d-a)*(d-b)*(d-c))
    print "a+b+c =", a, b, c
    print "Distr. =", d*2, "Area =", s
except ValueError:
    print "Please enter 3 valid sides"

如果您想在没有try阻止的情况下执行此操作,则可以将其设为

delta = (d*(d-a)*(d-b)*(d-c))
if delta>0:
    s = sqrt(delta)
    print "a+b+c =", a, b, c
    print "Distr. =", d*2, "Area =", s
else:
    print "Please enter 3 valid sides"

答案 1 :(得分:4)

当您尝试将其与负数一起使用时,

sqrt会出现该错误。 sqrt(-4)会出错,因为结果是复数

为此,您需要cmath

>>> from cmath import sqrt
>>> sqrt(-4)
2j
>>> sqrt(4)
(2+0j)

答案 2 :(得分:2)

我的代码出现了同样的错误,直到我使用cmath代替math这样的消息说:

import sys
import random
import cmath

x = random.randint(1, 100)
y = random.randint(1, 100)

a = 2 * x * cmath.sqrt(1 - x * 2 - y * 2)
b = 2 * cmath.sqrt(1 - x * 2 - y * 2)
c = 1 - 2 * (x * 2 + y * 2)

print ( 'The point on the sphere is: ', (a, b, c) )

这样可以正确运行我的代码。

答案 3 :(得分:0)

使用cmath代替..

import cmath
num=cmath.sqrt(your_number)
print(num)

现在无论数字是正确的还是正数,你都会得到一个结果......

答案 4 :(得分:0)

我认为问题在于你不能用用户输入的任何边来定义三角形。尝试制作一个边长为10,2和1的三角形。不可能。因此,有时苍鹭的公式无法奏效,因为没有三角形。