2013-10-15 58 views
0
def troca_valor(lista, i1, i2): 
    a = lista[:] 
    tam = len(lista) 
    if i1 or i2 > tam: 
     return None 
    else: 
     a[i1] = lista[i2] 
     a[i2] = lista[i1] 
     return a 

assert troca_valor([0,1,2,3],2,0) == [2,1,0,3] 
assert troca_valor(["a", "e", "i", "o", "u"],1,3) == ["a", "o", "i","e", "u"] 
assert troca_valor([0,1,2,3],7,3) == None 
assert troca_valor([0,1,2,3],2,5) == None 

我在名單的變化而變化的值一個位置每另一個,像斷言,我試圖做這樣的事情的代碼,但顯示了斷言錯誤兩個值。這是我的第一個問題,我使用搜索,但沒有找到類似的問題。對不起我的英語不好。Python的 - 改變一個列表

+1

仔細看'i1或i2> tam'; Python沒有看到i1大於tam或者i2大於tam;它認爲'i1'是真的或'i2> tam'。在你的第一個斷言中,'i1'是2,這意味着它是一個真正的值。 –

+0

謝謝,對不起一個愚蠢的問題,但我真的不知道。 – caslu

回答

1

我認爲你誤解了or運營商。 Python首先評估i1的真實性。如果它是真的(在你的情況下,非零),然後python執行該塊沒有看第二個條件。你真正想要的是,第一個條件還要檢查索引是否對列表有效。即它應該是:

if i1 > tam or i2 > tam: 
    ... 

而且,順便說一句,在蟒蛇交換elments一個常見的成語是:

a, b = b, a 

所以,你的代碼的工作版本看起來是這樣的:

def troca_valor(lista, i1, i2): 
    a = lista[:] 
    tam = len(lista) 
    if i1 > tam or i2 > tam: 
     return None 
    else: 
     a[i1], a[i2] = lista[i2], lista[i1] 
     return a 

assert troca_valor([0,1,2,3],2,0) == [2,1,0,3] 
assert troca_valor(["a", "e", "i", "o", "u"],1,3) == ["a", "o", "i","e", "u"] 
assert troca_valor([0,1,2,3],7,3) == None 
assert troca_valor([0,1,2,3],2,5) == None 
+0

非常感謝你! – caslu

相關問題