我有一个使用上一个元素查找当前元素的公式:
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
。
有什么想法为什么我只能得到零?
答案 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