2016-08-02 70 views
-1

我是Udacity的計算機科學入門課程的新手。關於交換價值的問題我們有一個相當簡單的問題,我不太明白。下面是問題:交換價值

以下哪個語句序列使變量X的值與語句之前的值相同?假設a和x都指代這個代碼之前的整數值。

爲什麼這是真的?

a,x = x,a 
a,x = x,a 

例如,如果我有:

a,x = 4,5 

然後 一個= 4且x = 5

對於第二部分:

a,x = 5, 4 

則a = 5和x = 4 所以x不等於之前的情況。有人能解釋爲什麼這是真的嗎?

+0

另外,對於這兩個語句,您應該使用'a,x = x,a',而不是用您選擇的隨機整數替換'x'和'a'。 – 3442

+1

這些陳述都沒有對他們有任何「真相」。他們都是任務。 – dashiell

+0

因爲它交換了兩次。 –

回答

0

這只是交換,然後再次交換。

>>> a = 2 
>>> x = 1 
>>> a,x = x,a # We swapped them, so a = 1 and x = 2 now 
       # During evaluation, this statement will be equivalent to "a,x = 1,2" 
>>> a,x = x,a # And now we swap them again, so they're back to their original values 
       # During evaluation, this statement will be equivalent to "a,x = 2,1" 
>>> a 
2 
>>> x 
1 

看起來你缺少的是值的變化在中間。你不能在開始時使用xa,在你的例子中用4和5代替所有的事件,因爲xa在操作過程中發生了變化。

+0

謝謝!我現在知道了。 – johnnewbie

0

發生這種情況是因爲Python的所謂拆包作業_工作。實質上,解釋器從賦值語句的左側創建一個目標列表,並從賦值語句的右側創建一個值列表,然後將值賦給目標。

所以在

a, b = 4, 5 

要分配4 a和5 b。然後

a, b = b, a 

分配5(的b的電流值),以a和4(的a的電流值),以b

重複上一條語句因此將值切換回原始變量。