计算SandPiles的总和

时间:2017-01-15 13:10:06

标签: python

我是python中的菜鸟 好吧,我观看了来自numberphile的视频(https://youtu.be/1MtEUErz7Gg) 这是关于sandpiles(添加它们)所以我决定编写我自己的python程序来添加2个sandpiles。 但由于某种原因,它不起作用 该程序给了我错误的总和,如2 + 2 = 7类型错误

它应该给我:

  

[[2,2,0],[2,1,1],[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]]

这是我的代码

$char-w: 1ch;
$gap: .5*$char-w;
$n-char: 7;
$in-w: $n-char*($char-w + $gap);

input {
  border: none;
  width: $in-w;
  background: repeating-linear-gradient(90deg, 
    dimgrey 0, dimgrey $char-w, 
    transparent 0, transparent $char-w + $gap) 
    0 100%/100% 2px no-repeat;
  font: 5ch consolas, monospace;
  letter-spacing: $gap;

  &:focus {
    outline: none;
    color: dodgerblue;
  }
}

1 个答案:

答案 0 :(得分:0)

你真的应该在你的问题中更具体。按原样运行代码会导致错误。

无论如何,看起来奇怪的一件事是检查功能。是否应该过滤掉沙堆外的指数?在这种情况下,我认为你会看到这里遗漏的东西:

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

请尝试使用此功能:

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

这个循环的第二个问题是你在迭代它时从neg 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]]