问题
What causes the problem?
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
Error:
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
回答1:
The problem is that the Heron's formula holds good only when the sum of the two numbers are greater than the third. You need to check that explicitly.
A better way as you are using a code to do that is by using Exception handling
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"
If you want to do it without try
block you can do it as
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"
回答2:
sqrt
gives that error when you try to use it with a negative number. sqrt(-4)
gives that error because the result is a complex number.
For that, you need cmath
:
>>> from cmath import sqrt
>>> sqrt(-4)
2j
>>> sqrt(4)
(2+0j)
回答3:
I got the same error with my code until I used cmath
instead of math
like aneroid said:
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) )
This way ran my code properly.
回答4:
Use cmath instead..
import cmath
num=cmath.sqrt(your_number)
print(num)
Now regardless of whether the number is negetive or positive you will get a result...
回答5:
I think the problem is that you cannot define a triangle with whatever sides the users inputs. Try to make a triangle with length of sides, 10,2 and 1. Impossible. So, sometimes the Heron's Formula cannot work, because there is no triangle.
来源:https://stackoverflow.com/questions/29375970/python-math-domain-error-sqrt