我有这个代码创建一个用零填充的矩阵。我想用创建蛇对象时给出的“符号”替换一些零。然后我想用我的符号替换矩阵中的零,而不增加矩阵中元素的总量。
在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)
答案 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
。