三角形面积 - Python 27
这个程序是用来计算三角形的面积的。三角形的三条边(a、b、c)是输入的内容。这个代码在某些数字下能正常工作,但在其他数字下就不行了。例如:
当 a、b 和 c 分别是:
2, 3, 4 时,代码运行正常。
2, 3, 5 时,输出结果是 0.00,这个结果是错误的。
2, 3, 6 时,程序会显示数学领域错误。
def main():
print "Program calculates the area of a triangle."
print
a, b, c = input("Enter triangle's sides length: ")
s = (a+b+c) / 2.0
area = sqrt(s*(s-a)*(s-b)*(s-c))
print "The area is %.2f" % area
main()
你能看出问题出在哪里吗?
2 个回答
7
这个公式是没问题的,问题在于你的期望有点偏差。
2, 3, 5的输出是0.00,这个结果是错的。
真的吗?那你能用边长为2、3和5的线段画一个三角形吗?:^) 其实只有一种可能,就是一个退化三角形——也就是一条线(2英寸的线段和3英寸的线段连接在一起),显然它的面积是零。
并不是所有三组数字都能组成一个三角形。你需要满足这三个条件:a+b>c
、b+c>a
和c+a>b
。以(2, 3, 6)为例,你可以看到:
3+6 > 2
和6+2 > 3
都成立,但2+3 < 6
,所以根本不存在这样的三角形。
1
你的代码看起来没问题,我们来看看你的数学测试案例:
案例 1:
a=2; b=3; c=5;
s=(2+3+5)/2.0
= 5.00
你有一个面积的计算公式:area = sqrt(s*(s-a)(s-b)(s-c))
在这个公式中,有一个(s-c),结果是(5.00 - 5) = 0。在这种情况下,面积 = 0.00,这个结果是正确的。
案例 2:
a=2; b=3; c=6;
s=(2+3+6)/2.0
= 5.50
关于(s-c),你得到的是(5.50 - 6) = -0.5
负数的平方根会导致“数学域错误”
以上结果表明这些数字不能形成合法的三角形。你的代码或公式没有问题。不过,下次测试代码之前,确保你的测试案例是合理的。
希望这对你有帮助 =]