2017-01-15 43 views
-2

我在python 一個小白嘛我看着從numberphile(https://youtu.be/1MtEUErz7Gg) 的視頻,這是關於沙堆(加入他們),所以我決定寫我自己的Python程序中添加2個沙堆。 但由於某種原因,這是行不通的 該計劃使我錯誤的總和如2 + 2 = 7類型錯誤計算沙堆的總和

它應該給我:

[2,2,0],[ 2,1,0],[0,1,3]] + [[2,1,0],[1,0,1],[3,1,0]] = [[2,1,0 ],[0,3,3],[1,2,3]]

而是給出:

[ [2,2,0],[2,1,1],[0,1,3]] + [[2,1,0],[1,0,1],[3,1,0]] = [[1,3,3],[0,1,2],[2,2,3]]

這是我的代碼

X = [ [2, 2, 0], [2, 1, 1], [0, 1, 3] ] 
Y = [ [2, 1, 0], [1, 0, 1], [3, 1, 0] ] 
xy = [ [0, 0, 0], [0, 0, 0], [0, 0, 0] ] 

i = j = 0 

while (i < 3): 
    while(j < 3): 
     xy[i][j] = X[i][j] + Y[i][j] 
     j = j + 1 
    i = i + 1 
    j = 0 

def get_above(pile): 
    found = False 
    while not found: 
     i, j = 0,0 
     while (i < 3): 
       while (j < 3): 
        if(pile[i][j] > 3): 
         return i, j 
        j = j + 1    
       i = i + 1 
       j = 0 
     found = True   

    return True    


def tupple_pile(): 

    while get_above(xy): 
     i, j = get_above(xy) 
     neg = [ [i, j+1], [i+1, j], [i, j-1], [i-1,j] ] 
     neg = [n for n in neg if n[0] in [0, 1, 2] and n [1] in [0, 1, 2]] 
     k = 0 
     while k < len(neg): 
      p = neg[k][0] 
      q = neg[k][1] 
      xy[p][q] = xy[p][q] + 1 
      k = k + 1 

     xy[i][j] = xy[i][j] - 4 

    return xy  

tupple_pile() 
+0

你是什麼意思它不工作?你是如何試圖解決它的? :) – Moberg

+1

更具體的什麼不工作。說明預期的結果,實際結果以及任何回溯作爲錯誤。請參見[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

+0

請首先說明您要解決的問題。我們不知道你的意思是*添加sandpiles。給出一個問題陳述。 –

回答

0

你真的應該更具體在你的問題。按原樣運行代碼會導致錯誤。

無論如何,看起來很奇怪的一件事是檢查功能。它是否應該過濾掉沙堆外的索引?在這種情況下,我想你會看到的東西在這裏失蹤:

if (neg[i][j] < 0) or (neg[i][j]): 

嘗試用這個代替:

if (neg[i][j] < 0) or (neg[i][j] > 2): 

這個循環的第二個問題是,您是從負del(neg[i])刪除元素同時遍歷它。這是容易出錯的。正如你可能已經注意到的那樣,只要你刪除一個物品,i就會超出範圍。

一種更好的方式來篩選列表是使用列表理解,這樣的事情:

neighbors = [ [i, j+1], [i+1, j], [i, j-1], [i-1,j] ] 
neighbors = [n for n in neighbours if n[0] in [0, 1, 2] and n[1] in [0, 1, 2]] 
+0

是的檢查功能是假設過濾出堆外的索引,謝謝 –