【发布时间】:2020-02-22 09:47:29
【问题描述】:
我正在创建一个战舰游戏,并想检查玩家目标位置周围的位置,以检查是否有任何船只位于那里,即
!(https://imgur.com/a/9Dddom0)
在这个板上,程序将检查任何船只的位置 (2,0)、(1,1)、(2,2) 和 (3,1),如果存在任何船只,则子程序将返回 True,并且如果不是,它将返回 False。
这是我当前的代码:
def RadarScan(Board, Ships, R, C):
around = [[C, R - 1], [C + 1, R], [C, R + 1], [C - 1, R]]
for i in around:
for x in range(2):
if int(i[x]) > 9 or int(i[x]) < 0:
around.remove(i)
near = False
for i in range(len(around)):
if Board[around[i][0]][around[i][1]] == "-" or "m" or "h":
continue
else:
near = True
break
if near == True:
return True
else:
return False
当检查目标周围的位置是否在棋盘上时,我使用一个 for 循环来增加周围的列表,其中包含所有周围的位置,但是假设周围的第二个位置是 (10,9) , for 循环会删除这个位置,因为它不在棋盘上,然后递增到周围的下一个位置,即第三个位置,但是周围只剩下原始位置 1、3 和 4,所以它会跳过检查原来的位置 3,而是直接去原来的位置 4。
(对不起,如果这有点混乱)
所以我的问题是,我可以在 'around.remove(i)' 下添加一些东西,将 for 循环 'for i in around' 的增量向后移动 1 吗?
【问题讨论】:
-
你为什么要使用第一个嵌套的 for 循环?将元素添加到周围列表时只需检查 9?那么你在列表中只有有效的项目,你不需要进一步关心这个
-
@simirimia ,我该怎么做?
-
从根本上说,您试图通过“将迭代器移回一个”来解决的问题是在迭代列表时尝试从列表中删除项目。
-
另外,我不知道你从哪里学会写
for i in range(len(...)),但不要那样做,不要再听谁让你这样做。只需直接遍历元素即可。
标签: python list for-loop multidimensional-array increment