2016-11-22 276 views
0

我是python新手,所以我想問你一個問題..a,b = b,a + b和a = b,b = a + b在fibonacci中的區別是什麼[Python]

以前當我在寫一個斐波那契功能我tryed更換

a, b = b, a+b 

a = b 
b = a + b 

認爲這是同樣的事情,但我注意到,輸出是不同的(錯誤) 不該這兩個代碼做同樣的事? 這是全碼:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

def main(args): 
    fibonacci(1000) 
    return 0 

def fibonacci(n): 
    a, b = 0, 1 
    while b < n: 
     print b, 
     a, b = b, a+b # if I comment this and decomment the two line below it shows me a different output 
     # a = b 
     # b = a + b 

if __name__ == '__main__': 
    import sys 
    sys.exit(main(sys.argv)) 
+2

在第一個上,計算新值'b'是用'a'的舊值進行的。在第二個與新的一個。 –

+0

這是在Python教程本身[編程的第一步](https://docs.python.org/3/tutorial/introduction.html#first-steps-towards-programming)中解釋的 –

+0

相關內容:http:// stackoverflow.com/questions/40405818/why-doesn-t-executing-axxa-twice-result-in-a-change-of-values –

回答

3

當你這樣做:

a, b = b, a+b 

a將保持以前的值b和b將根據以前的價值持有a+b

但是,當你這樣做:的a

a = b 
b = a + b 

值在a=b更新爲b,因此a+b都會有不同的結果a現在已更新。

例如,查看交換兩個值的簡單代碼。有可能是因爲數值上的變化:

>>> a , b = 5, 10 
>>> a, b = b, a 
>>> a, b 
(10, 5) 
2

b, a+b相同(b, a+b)(元組)。當你做a, b = b, a+b時,你將第一個元素分配給左側的變量,第二個值分配給右側的變量。

在您更換的產品中,您更改了a的值,之後計算了b,這在以前沒有發生過。

因此,如果我們假設a = 1b = 2,我們有:

a, b = (2, 1+2) 
>> print(a) 
>> 2 
>> print(b) 
>> 3 

在你後面的例子中,我們必須:

a = 2 
b = 2 + 2 
>> print(a) 
>> 2 
>> print(b) 
>> 4 
相關問題