三角形面积 - Python 27

0 投票
2 回答
5618 浏览
提问于 2025-04-17 14:12

这个程序是用来计算三角形的面积的。三角形的三条边(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>cb+c>ac+a>b。以(2, 3, 6)为例,你可以看到:

3+6 > 26+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

负数的平方根会导致“数学域错误”

以上结果表明这些数字不能形成合法的三角形。你的代码或公式没有问题。不过,下次测试代码之前,确保你的测试案例是合理的。

希望这对你有帮助 =]

撰写回答