各位大佬,這玩意還講究順序么?
sum=0
x=1
n=1
while True:
? ?x*=2
? ?n+=1
? ?sum+=x
? ?if n>20:
? ? ? ?break
print(sum)
這段代碼求和出來是2097150
但是換一下順序
sum=0
x=1
n=1
while True:
? ?sum+=x
? ?x*=2
? ?n+=1
? ?if n>20:
? ? ? ?break
print(sum)
結果就變成了1048575
求大佬詳細解釋一下啊
2018-02-27
沒換順序:x*=2 ?n+=1 ?sum+=x 是先賦值給x,x計算的值為2,再運算sum的值為3;
換了順序:sum+=x ?x*=2 ?n+=1 是先賦值給sum,sum計算的值為2,再運算x的值為2。
2018-02-26
第一段代碼中sum相當于0+2+4+...+2^19+2^20=2097150,第二段代碼sum=0+1+2+4+...+2^19=1048575,所以sum和x的先后計算順序影響了結果。不知道能不能理解?我是剛開始學,有問題多交流。
2018-02-26
先加后乘和先乘后加的結果當然不一樣
2018-02-26
第一段代碼與第二段代碼執行次序不一樣,第一段先改變x,n再計算sum,然后再判斷,第二段先計算sum再改變x,n,所以第二段比第一段少執行了一次