我在Python 3.7中工作,我的部分任务是定义Wallis的近似圆周率方法。我是一名数学学生,不适合做计算机科学,真的可以使用一些帮助,这总共相当于我成绩的 40%,如果不正确定义这一点,我就不能再做任何事情了。这是我目前编写的代码:
def pi_wallis(n):
z=1
for k in range(n):
a=(2.0*k)//((2.0*k)-1.0)
b=(2.0*k)//((2.0*k)+1.0)
z*=(a*b)
return z
无论我输入什么,我总是得到-0.0,谁能说明为什么?我首先有 z=0 并尝试更改为 z=2,仍然得到 -0.0
您使用的是整数除法 (//
(,这意味着一个分数(例如,第一次迭代中的2/3
(足以使整个序列为 0。
您应该使用浮点除法 (/
(。如果您从 1 开始序列并在n + 1
中结束,也会更清晰(因为range
最终是排他性的(。
def pi_wallis(n):
z = 1
for k in range(1, n + 1):
a = (2.0*k) / ((2.0*k)-1.0)
b = (2.0*k) / ((2.0*k)+1.0)
z *= a*b
return z