我是python的新手,我對其他代碼的看法很差。 對於大多數人來說,一個愚蠢的問題,但我應該開始的地方。While循環Python斐波納契
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
我不明白爲什麼要進入a, b = b, a+b
我看到和理解的結果,我可以斷定的基本算法,但我不明白的是與這條線,以及爲什麼我們發生的真正理解需要它。
非常感謝
我是python的新手,我對其他代碼的看法很差。 對於大多數人來說,一個愚蠢的問題,但我應該開始的地方。While循環Python斐波納契
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
我不明白爲什麼要進入a, b = b, a+b
我看到和理解的結果,我可以斷定的基本算法,但我不明白的是與這條線,以及爲什麼我們發生的真正理解需要它。
非常感謝
這條線按以下順序執行:
b
和第二到a + b
a
和第二個在b
tr icky的一部分是,首先執行正確的部分,你不需要使用臨時變量。
您需要它的原因是,如果您使用新值更新a
,您將無法計算出b
的新值。在計算新值時,您總是可以使用臨時變量來保留舊值,但這是避免這種情況的一種非常好的方法。
它被稱爲序列拆包。
在你的聲明:
a, b = b, a + b
右側b, a + b
創建tuple
:
>>> 8, 5 + 8
(8, 13)
你可以分配這個到左側,這也是一個元組a, b
。
>>> a, b = 8, 13
>>> a
8
>>> b
13
見最後一段上Tuples and Sequences的文檔:
聲明是元組封裝的一個例子: '你好!' 的值12345,54321和在一個元組中包裝在一起。反向操作也是可能的:
>>> x, y, z = t
這就是所謂的,非常合適,序列拆封並適用於在右側的任意序列。序列解包要求左側的變量列表與序列的長度具有相同數量的元素。請注意,多重賦值實際上只是元組打包和序列解包的組合。
[Siftables TED talk](https://www.ted.com/talks/david_merrill_demos_siftables_the_smart_blocks)有一個在2分20秒生成斐波那契數列的好例子 –
非常感謝!我現在明白了。這對我來說聽起來很合乎邏輯。 –
@AlexNewmiller很棒。感謝您的反饋。 –
你知道下面的答案是關於元組賦值/打包/解包的答案嗎?如果是這樣,並且你仍然不明白爲什麼你的代碼能夠正常工作,那麼如果你嘗試像Python解釋器一樣的行爲,並且一步一步地通過你的代碼,那麼它可能會有所幫助。 –
謝謝,我會牢記下我的下一個問題。這也是很好的知道這些東西被稱爲.. –
瞭解。當你不知道事物的名字時,很難問正確的問題!一個好的教程應該告訴你事情的名字,但是我意識到,當你開始學習編碼時,很難記住所有這些東西,而且很難知道什麼信息對記憶很重要,什麼是瑣事。我所能建議的是繼續學習你的書籍/教程,並使用示例代碼進行演示,最終它將沉入其中。 –