三角边和计划

时间:2014-01-08 22:24:34

标签: python math python-2.7

所以在数学课上我们遇到了这个问题:

你会得到一个边长4个单位的三角形。在三角形内部,存在由较大三角形的中段制成的较小三角形。共有8个内接三角形。总边长是多少?

所以,我决定看看我是否可以编写一个python程序来解决所有三角形和所有边长的问题。

这是:

tri = int(raw_input("How many triangles are there?\n>"))
size = int(raw_input("What is the side length of the biggest triangle?\n>"))
tot = 0
for i in range(1, tri):
    tot += 3*(float(size/i))
print str(tot)

我尝试使用tri = 8和size = 4,就像原始问题一样,得到了24.0As wolfram alpha shows us, that is wrong

为了澄清每一步中发生的事情,我将其编辑为:

tri = int(raw_input("How many triangles are there?\n>"))
size = int(raw_input("What is the side length of the biggest triangle?\n>"))
tot = 0
for i in range(1, tri):
    tot += 3*(float(size/i+0.0000001))
    print str(tot)
print str(tot)

输出结果为:

12.0000003
18.0000006
21.0000009
24.0000012
24.0000015
24.0000018
24.0000021
24.0000021

有人认为他们知道我哪里出错吗?

3 个答案:

答案 0 :(得分:1)

您没有循环tri次:

for i in range(1, tri):

结束值包含在内,因此您在这里计算17,而不是8。移除1并在循环中添加1

for i in range(tri):
    tot += 3.0 * size / (i + 1)

您只需在计算中使用一个浮点值,将3转换为3.0即可。不幸的是,在Python 2中,/将使用整数 floor 除以两个值为整数时,在Python 3中解决了一个问题:

>>> 1 / 2
0
>>> 1.0 / 2
0.5

在乘法中使用3.0将确保除法的左侧操作数是浮点数。

您还可以使用脚本顶部的from __future__ import division切换到/运算符的正确除法,它始终返回浮点结果。

接下来,您未在公式中使用正确的 exponents ;它不是size / (i + 1);它是size / (2 ** i);你需要在这里除以2的幂;不除以1,2,3,4,而是1,2,4,8等:

tot = 0
for i in range(tri):
    tot += 3.0 * size / 2 ** i

现在你得到一个匹配Wolfram Alpha的结果:

>>> tri, size = 8, 4
>>> tot = 0
>>> for i in range(tri):
...     tot += 3.0 * size / 2 ** i
... 
>>> tot
23.90625

答案 1 :(得分:0)

变化:

float(size/i)

为:

float(size)/i

答案 2 :(得分:0)

由于operator precedence in Python;

size/i+0.0000001

使用整数除法

size/i

然后添加0.0000001。实际上,它是

(size/i)+0.0000001

相反,请使用:

float(size)/i

强制浮点除法。