これは...つまり1 1 2 3 5 8Python 3のFibonacciシリーズの奇妙な動作?
print ('Fibonacci series...')
a,b = 0,1
while b<50:
print(b)
a = b
b = a + b
を正しいフィボナッチ数列を印刷していないこれを行うには良い方法がある場合は私に知らせてください。
これは...つまり1 1 2 3 5 8Python 3のFibonacciシリーズの奇妙な動作?
print ('Fibonacci series...')
a,b = 0,1
while b<50:
print(b)
a = b
b = a + b
を正しいフィボナッチ数列を印刷していないこれを行うには良い方法がある場合は私に知らせてください。
最初に、最初のコードスニペットにインデントエラーがあります。最後の2行は字下げして、while
ループ内で実行されるようにする必要があります。
print ('Fibonacci series...')
a,b = 0,1
while b<50:
print(b)
a = b
b = a+b
しかし、これでも正しい結果が得られません。これらの2つのコードスニペットが異なる理由を見てみましょう。
a, b = b, a + b
:これは、左側の前右側の評価と、a
b
およびb
a + b
に割り当てます。つまり、新しい値を割り当てる変数を調べる前に、Pythonは最初にb
とa + b
が何であるかを見ます。つまり、a
という古い値がb = a + b
の設定に使用されます。このhereについて詳しく読むことができます。
a = 1
b = 2
a, b = b, a + b # set a to 2, set b to 1 + 2
print(a) # 2
print(b) # 3
a = b; b = a + b
:これはa
はまず、b
に設定割り当ての計算に使用されるように割り当てを順次、行い。
a = 1
b = 2
a = b # set a to 2
b = a + b # set b to 2 + 2
print(a) # 2
print(b) # 4
a=b
b = a+b
最初のコードサンプルでは、b = b * 2
に相当します。代わりにb += original_value(a)
が必要です。目標値の変更を取得するために
temp = a
a = b
b += temp
:だからどちらかが2番目のコードサンプル(a,b = b, a+b
)のように、タプルの割り当てを行う、または一時変数を使用する必要があります。