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)
這樣輸出結果是錯的。為什么?
2019-12-26
如果把表達式寫在同一行是沒問題的,因為他們相當于同時進行計算,但如果分開寫成兩行就會出現問題,因為計算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
2019-11-06
a,b=b,a+b 這種賦值方式是先計算等式右邊,再把計算結果賦值給等式左邊。而a=b,b=a+b,這樣是先把b的值賦給a,然后再計算b=a+b,就變成了b=b+b了
2019-09-26
兩行搞定?
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
2019-09-26
俺自個兒摸索出來的 現在能寫出來的
a, b = b , a+b
不等同于
a = b
b= a+b
而是
c = b?
b = a+b
a = c
2019-09-24
教程代碼寫的什么鬼,看不懂。
我自己寫的 好理解:
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)
2019-09-24
上述輸出結果是
正確答案是這樣的:
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]