导致问题的原因是什么?
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
答案 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的三角形。不可能。因此,有时苍鹭的公式无法奏效,因为没有三角形。