2015-11-04 34 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

這是,謝謝 –

相關問題