0

该程序设置为计算三角形的面积。三角形边 (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()

你能看出有什么问题吗?

4

2 回答 2

7

该公式有效;这是你的期望有点偏离。

2,3,5 输出 0.00 这是错误的。

真的吗?那么,你能画出一个边长分别为 2、3 和 5 的三角形吗?:^) 唯一的可能性是退化的三角形——一条线(一条 2 英寸的线段连接到一条 3 英寸的线段),显然它的面积为零。

并非三个数字的每个组合都可以作为三角形。你需要有a+b>c,b+c>ac+a>b. 对于 (2,3,6),您有

3+6 > 26+2 > 3, 但是2+3 < 6, 所以不存在这样的三角形。

于 2013-01-30T15:54:44.503 回答
1

您的代码似乎合法,让我们看看您的数学测试用例:

情况1:

a=2; b=3; c=5;

s=(2+3+5)/2.0
 = 5.00

你有 area = sqrt(s*(sa) (sb) (sc))

看到公式中有 (sc),结果是 (5.00 - 5) = 0 在这种情况下,面积 = 0.00,这是正确的。

案例二:

a=2; b=3; c=6;

s=(2+3+6)/2.0
 = 5.50

就 (sc) 而言,您有 (5.50 - 6) = -0.5

负数的 sqrt 给你“数学域错误”

上述结果意味着这些数字不能形成合法三角形。您的代码或公式没有任何问题。但是,在下次测试代码之前,请确保您的测试用例是合法的。

我希望它有帮助=]

于 2013-01-30T16:26:50.717 回答