Python:尝试查找矩阵索引时出错

时间:2012-12-01 15:43:39

标签: python list

我有这个代码创建一个用零填充的矩阵。我想用创建蛇对象时给出的“符号”替换一些零。然后我想用我的符号替换矩阵中的零,而不增加矩阵中元素的总量。

在snake类中使用我的“增长”函数我想确保只覆盖零但是我得到错误:

ValueError: (1, 4) is not in list 

当我确定这个位置确实存在时!每次运行程序时错误代码都不同,因为坐标是随机生成的。这是我的代码:

class field:
 def __init__(self):

    self.table= [ [ "0" for i in range(10) ] for j in range(10) ]

  def printfield(self):
     for row in self.table:
            print (row)


Class snake:

  def __init__(self,sign):
    self.sign = sign
    self.x = random.randint(1,9) 
    self.y = random.randint(1,9)    

    field.table[self.x][self.y] = sign


  def growth(self, list, index, element):
    if list[index] != 0:
        return False
    else:
        field.table[self.x-v*b][self.y-v*c] = element


  def increase(self,p,b,c):                                               

        for v in range(p+1):
                self.growth(field.table,field.table.index((self.x-v*b,self.y-v*c)), self.sign) 

2 个答案:

答案 0 :(得分:1)

错误来自您的增加方法而不是您的增长方法。当你致电table.index((self.x-v*b,self.y-v*c))时就会发生这种情况。当您调用索引表时,我不清楚您尝试做什么,但索引方法返回列表中值的位置。例如:

>>> A = [0, 1, 5, 10]
>>> A.index(5)
2

表似乎是整数列表的列表,因此当您调用table.index((1, 4))时,在索引中找不到元组(1, 4)。也许你想要table[1][4]

更新

我认为这就是你想要的:

self.growth(field.table, (self.x-v*b, self.y-v*c), self.sign)

并将field.table[self.x-v*b][self.y-v*c]替换为field.table[index[0]][index[1]]

(self.x-v*b, self.y-v*c)是您想要的索引,一旦将其传递给增长,您需要使用它的参数名称来引用它。

答案 1 :(得分:1)

您将二维列表中的索引与列表中的值混淆。声明

field.table.index((self.x-v*b, self.y-v*c))

在列表(1, 4)中查找(在您的给定错误情况下)field.table,当然不存在。你可能想要的是访问field.table[1][4]。您可以将元组作为变量传递给growth并使用其元素作为列表的索引,或者将field.table[self.x-v*b]作为列表传递给增长,并将self.y-v*c作为访问该列表的索引列表。

此外,您正在使用"0"填充列表,但请检查0功能中的growth