python正在检查周围点列表索引超出范围
我正在做一个学校的项目,我正试图浏览包含数字的列表。我试图检查所有8个周围的“块”,但我得到的索引超出范围异常 填写清单:python正在检查周围点列表索引超出范围,python,list,range,Python,List,Range,我正在做一个学校的项目,我正试图浏览包含数字的列表。我试图检查所有8个周围的“块”,但我得到的索引超出范围异常 填写清单: for i in range(0, self.sizeX): temp = [] for j in range(0, self.sizeY): temp.append(random.randint(0, 100)) self.map.append(temp) 检查周围环境 def check(self, i, j): cou
for i in range(0, self.sizeX):
temp = []
for j in range(0, self.sizeY):
temp.append(random.randint(0, 100))
self.map.append(temp)
检查周围环境
def check(self, i, j):
count = 0
if j-1 >= 0 & self.map[i][j-1] > 50:
count += 1
if (j+1) < len(self.map[i]) & self.map[i][j+1] > 50:
count += 1
if i-1 >= 0 & self.map[i-1][j] > 50:
count += 1
if i+1 < self.sizeX & self.map[i+1][j] > 50:
count += 1
if i-1 >= 0 & j-1 >= 0 & self.map[i-1][j-1] > 50:
count += 1
if i+1 < self.sizeX & j-1 >= 0 & self.map[i+1][j-1] > 50:
count += 1
if i-1 >= 0 & j+1 < self.sizeY & self.map[i-1][j+1] > 50:
count += 1
if i+1 < self.sizeX & j+1 < self.sizeY & self.map[i+1][j+1] > 50:
count += 1
return count
def检查(自身、i、j):
计数=0
如果j-1>=0&self.map[i][j-1]>50:
计数+=1
如果(j+1)50:
计数+=1
如果i-1>=0&self.map[i-1][j]>50:
计数+=1
如果i+150:
计数+=1
如果i-1>=0&j-1>=0&self.map[i-1][j-1]>50:
计数+=1
如果i+1=0&self.map[i+1][j-1]>50:
计数+=1
如果i-1>=0&j+150:
计数+=1
如果i+150:
计数+=1
返回计数
看起来检查>=0的条件有效,但检查大小限制的条件无效
顺便说一句,我在php中使用了这个确切的东西,没有任何问题,除了用
&
(按位and)替换和(逻辑and)之外,您的条件似乎是正确的
我还建议将测试作为变量取出;它有助于使代码更易于阅读
还请注意,您正在使用列索引,即map[x][y]
;更常见的是使用行对齐索引,即map[y][x]
。它本身并不是“错误”的,但处理起来可能有点笨拙
from random import randint
class Map:
def __init__(self, width, height):
self.width = width
self.height = height
self.map = [[randint(0, 100) for y in range(height)] for x in range(width)]
def neighbor_fn(self, i, j, fn=lambda x: x > 50):
left = i - 1
right = i + 1
above = j - 1
below = j + 1
do_left = left >= 0
do_right = right < self.width
do_above = above >= 0
do_below = below < self.height
return (
(do_left and do_above and fn(self.map[left][above]))
+ (do_above and fn(self.map[i][above]))
+ (do_right and do_above and fn(self.map[right][above]))
+ (do_left and fn(self.map[left][j]))
+ (do_right and fn(self.map[right][j]))
+ (do_left and do_below and fn(self.map[left][below]))
+ (do_below and fn(self.map[i][below]))
+ (do_right and do_below and fn(self.map[right][below]))
)
来自随机导入randint
类图:
定义初始值(自身、宽度、高度):
self.width=宽度
自我高度=高度
self.map=[[randint(01100)表示范围内的y(高度)]表示范围内的x(宽度)]
def neighbor_fn(self,i,j,fn=lambda x:x>50):
左=i-1
右=i+1
以上=j-1
低于=j+1
do_left=left>=0
do_right=右<自身宽度
do_over=高于>=0
do_below=低于<自身高度
返回(
(do_left和do_above以及fn(self.map[left][above]))
+(上面的do_和fn(self.map[i][上面])
+(do_right和do_above以及fn(self.map[right][above]))
+(do_left和fn(self.map[left][j]))
+(do_right和fn(self.map[right][j]))
+(左do_和下面do_以及fn(self.map[左][下面])
+(下面是do_和fn(self.map[i][follow]))
+(do_right和do_below以及fn(self.map[右][下])
)
您可能需要和
而不是二进制的&
。请尝试&
->和
,在Python中&
是按位和,其中和
是布尔和。“我正在尝试检查周围的所有8个“块”“请提供一个感谢,我尝试了它,而不是-,它工作正常:)