尝试将列表中的上一个元素添加到下一个元素,但保持为零

时间:2019-02-14 03:53:31

标签: python list

我有一个使用上一个元素查找当前元素的公式:

p(i) = 1 / (- 2 + p(i-1))

我要找到的代码是:

p = []
po = 0
i = .01

while i < 1:
    po = (-1) / (-2 + po)
    p.append(po)
    i = i + .01

print p

我得到的是:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我的第一个值(如果po最初为零)应该是1/2

有什么想法为什么我只能得到零?

2 个答案:

答案 0 :(得分:3)

在Python 2中,仅涉及整数的除法将始终产生整数,并四舍五入。您应该使用浮点数进行除法:

po = -1.0 / (-2 + po)

答案 1 :(得分:1)

@blhsing用户在其答案中指出,问题似乎在于整数除法:当对整数进行除法时,结果将四舍五入以产生新的整数。

通过将除法的一个自变量转换为float,除法还将返回float。更改为float的三个数字中的哪个都无所谓,更改其中一个就足以产生正确的结果:

  • 将初始化从po = 0更改为po = 0.0
  • 或将分度更改为po = (-1.0) / (-2 + po)
  • 或将分度更改为po = (-1) / (-2.0 + po)

此外,我发现您对i变量的使用有点奇怪。我可以建议使用xrange()进行forloop吗?

p = []
po = 0

# the '_' is used to say "I dont care about this value", so this
# runs the loop the specified amout of times
for _ in xrange(10):
    po = (-1.0) / (-2 + po)
    p.append(po)

print p