2015-11-04 92 views
1

前段时间我发现这个代码计算圆周率的数字:不明白为什么这个代码给出不同的结果不同版本的Python

def pi_digits(): 
    """generator for digits of pi""" 
    q,r,t,k,n,l = 1,0,1,1,3,3 
    while True: 
     if 4*q+r-t < n*t: 
      yield n 
      q,r,t,k,n,l = (10*q,10*(r-n*t),t,k,(10*(3*q+r))/t-10*n,l) 
     else: 
      q,r,t,k,n,l = (q*k,(2*q+r)*l,t*l,k+1,(q*(7*k+2)+r*l)/(t*l),l+2) 
digits = pi_digits() 
for i in range(30): print digits.next() 

,现在我想在Python 3.4和我使用它做了一个小的变化:

def pi(): 
    '''Generator for digits of pi''' 
    q,r,t,k,n,l = 1,0,1,1,3,3 
    while True: 
     if 4*q+r-t < n*t: 
      yield n 
      q,r,t,k,n,l = (10*q,10*(r-n*t),t,k,(10*(3*q+r))/t-10*n,l) 
     else: 
      q,r,t,k,n,l = (q*k,(2*q+r)*l,t*l,k+1,(q*(7*k+2)+r*l)/(t*l),l+2) 

def main(): 
    a=pi() 
    i=30 
    while i>0: 
     print(next(a)) 
     i-=1 

if __name__ == '__main__': 
    main() 

但我的代码打印错误的结果,如:

3.0, 
1.0476190476190477, 
3.272283272283272, 
3.6476767126921925, 
4.078229842128079, 
4.6365352277262, 
5.345159217838377, 
6.228740292622248, 
7.819098709270982, 
4.255764551767985, 
5.069552326563916, 
6.0642804719748575... 

那么是什么使区别?

+0

请修复缩进吗? –

回答

3

我相信不同之处在于您的部门。在Python 2中,将一个整数除以另一个整数会产生一个整数。在Python 3中,它产生一个浮点数。我相信您可以使用//运算符代替/以在Python 3中实现所需的行为。

+0

这是,谢谢 –

相关问题