这是我的小规模项目。目的是近似pi。我知道它不是很好,但算法是正确的。
CSS
好像应该有用,对吗?在python 3上,完全相同的代码给了我一个准确的答案。但是,在2.7.10中,这发生在shell中:
adds = 0
subtracts = 0
for x in range(0, 10):
adds += 1/(1 + 4*x)
subtracts += 1/(3 + 4*x)
print(adds) #DEBUGGING
print(subtracts) #DEBUGGING
pi = float(4*(adds + subtracts)
print(pi)
有人可以向我解释为什么会发生这种情况以及如何解决这个问题吗?我已经尝试过转换为字符串,格式化,舍入等常规方法,但这些方法都不起作用。就像我的变量被保存为1和0并尽管它们的值不断变化。再一次,相同的代码在Python 3上运行良好。
答案 0 :(得分:1)
在python2上,整数之间的除法导致整数除法,最终答案被截断为整数。
>>> 1 / 2
0
在python3上,情况并非如此,因为除非明确使用float
整数除法运算符,否则除法会自动产生//
结果。
您希望至少有一个float
类型的操作数:
>>> 1. / 2
0.5
for x in range(0, 10):
adds += 1. / (1 + 4 * x)
subtracts += 1. / (3 + 4 * x)
请注意1.
为1.0
。
答案 1 :(得分:0)
在Python 2.7上,x / y
是整数除法,但你可以使用{3}}使用Python 3的真正除法:
__future__ division
出:
from __future__ import division
adds = 0
subtracts = 0
for x in range(0, 10):
adds += 1/(1 + 4*x)
subtracts += 1/(3 + 4*x)
print(adds) #DEBUGGING
print(subtracts) #DEBUGGING
pi = float(4*(adds + subtracts))
print(pi)