亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

a, b = b , a+b 是不是等同于如下寫法?為什么結果不對呢。

a, b = b , a+b

是不是等同于

a = b

b= a+b

即:

class Fib(object):

? ? def __call__(self, num):

? ? ? ? a, b, L = 0, 1, []

? ? ? ? for n in range(num):

? ? ? ? ? ? L.append(a)

? ? ? ? ? ? a = b

? ? ? ? ? ? b = a + b

? ? ? ? return L


f = Fib()

print f(10)


這樣輸出結果是錯的。為什么?


正在回答

6 回答

如果把表達式寫在同一行是沒問題的,因為他們相當于同時進行計算,但如果分開寫成兩行就會出現問題,因為計算b=a+b的時候a的值已經發生了變化,第二行相當于b*=2,可以參考如下代碼

????????L=[]

? ? ? ? a=0

? ? ? ? b=1

? ? ? ? L.append(a)

? ? ? ? x=1

? ? ? ? while x<number:

? ? ? ? ? ? t=a

? ? ? ? ? ? a=b

? ? ? ? ? ? b=b+t

? ? ? ? ? ? L.append(a)

? ? ? ? ? ? x+=1

? ? ? ? return L


0 回復 有任何疑惑可以回復我~

a,b=b,a+b 這種賦值方式是先計算等式右邊,再把計算結果賦值給等式左邊。而a=b,b=a+b,這樣是先把b的值賦給a,然后再計算b=a+b,就變成了b=b+b了

1 回復 有任何疑惑可以回復我~

兩行搞定?

fei = lambda n : n if n == 0 or n <=2 else fei(n-1)+fei(n-2)

fei_lst = [fei(n) for n in range(7)]?

但 是開頭少個1


0 回復 有任何疑惑可以回復我~

俺自個兒摸索出來的 現在能寫出來的

a?=?1
b?=?0
c?=?[]
for?i?in?range(7):
????if?i?==?0:
????????c.append(i)
????a,?b?=?b,?a+b

????c.append(b)
print(c)


a, b = b , a+b

不等同于

a = b

b= a+b

而是

c = b?

b = a+b

a = c



0 回復 有任何疑惑可以回復我~

教程代碼寫的什么鬼,看不懂。

我自己寫的 好理解:


class Fib1(object):

? ? def __call__(self, num):

? ? ? ??

? ? ? ? L = [0,1]

? ? ? ? for n in range(2,num):

? ? ? ? ? ? Ln=L[n-2]+L[n-1]

? ? ? ? ? ? L.append(Ln)

? ? ? ? return L


f = Fib1()

print f(10)


[0,?1,?1,?2,?3,?5,?8,?13,?21,?34]


0 回復 有任何疑惑可以回復我~


上述輸出結果是

[0,?1,?2,?4,?8,?16,?32,?64,?128,?256]

正確答案是這樣的:

class Fib(object):

? ? def __call__(self, num):

? ? ? ? a, b, L = 0, 1, []

? ? ? ? for n in range(num):

? ? ? ? ? ? L.append(a)

? ? ? ? ? ? a, b = b, a + b

? ? ? ? return L


f = Fib()

print f(10)

輸出結果是:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]





0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

a, b = b , a+b 是不是等同于如下寫法?為什么結果不對呢。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號