在python中,如何将for循环的增量设置为1?

在python中,如何将for循环的增量设置为1?,python,list,for-loop,multidimensional-array,increment,Python,List,For Loop,Multidimensional Array,Increment,我正在创建一个战舰游戏,并希望检查玩家目标位置周围的位置,以检查是否有任何战舰位于那里,即 !!() 在此板上,程序将检查任何船舶的位置(2,0),(1,1),(2,2)和(3,1),如果存在,子程序将返回True,如果不存在,则返回False 这是我目前的代码: def雷达扫描(船、船、R、C): 大约=[[C,R-1],[C+1,R],[C,R+1],[C-1,R]] 对于我来说: 对于范围(2)内的x: 如果int(i[x])>9或int(i[x])9或int(约[index][x])

我正在创建一个战舰游戏,并希望检查玩家目标位置周围的位置,以检查是否有任何战舰位于那里,即

!!()

在此板上,程序将检查任何船舶的位置(2,0),(1,1),(2,2)和(3,1),如果存在,子程序将返回True,如果不存在,则返回False

这是我目前的代码:

def雷达扫描(船、船、R、C):
大约=[[C,R-1],[C+1,R],[C,R+1],[C-1,R]]
对于我来说:
对于范围(2)内的x:
如果int(i[x])>9或int(i[x])<0:
周围。移除(i)
近=假
对于范围内的i(len(约)):
如果电路板[i][0]][i][1]]==“-”或“m”或“h”:
持续
其他:
近似=真
打破
如果near==True:
返回真值
其他:
返回错误
当检查目标位置周围的位置是否在电路板上时,我使用for循环在包含所有周围位置的列表中递增,但是假设第二个位置是(10,9),for循环将删除此位置,因为它不在电路板上,然后在大约处增加到下一个位置,即第三个位置,但是在大约处只剩下原始位置1、3和4,因此它将跳过检查原始位置3,而直接转到原始位置4

(如果这有点混乱,很抱歉)


所以我的问题是,我是否可以在“around.remove(I)”下面添加一些东西,将for循环“for I in around”的增量向后移动1?

如果我正确理解您的问题,一种方法可能是手动索引:

def RadarScan(Board, Ships, R, C):
    around = [[C, R - 1], [C + 1, R], [C, R + 1], [C - 1, R]]
    index = 0
    for i in range(len(around)):
        index += 1
        for x in range(2):
            if int(around[index][x]) > 9 or int(around[index][x]) < 0:
                around.remove(around[index])
                index -= 1

    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
def雷达扫描(船、船、R、C):
大约=[[C,R-1],[C+1,R],[C,R+1],[C-1,R]]
索引=0
对于范围内的i(len(约)):
指数+=1
对于范围(2)内的x:
如果int(约[index][x])>9或int(约[index][x])<0:
删除(围绕[索引])
索引-=1
近=假
对于范围内的i(len(约)):
如果电路板[i][0]][i][1]]==“-”或“m”或“h”:
持续
其他:
近似=真
打破
如果near==True:
返回真值
其他:
返回错误

For循环无法执行此操作。使用while循环:

def雷达扫描(船、船、R、C):
大约=[[C,R-1],[C+1,R],[C,R+1],[C-1,R]]
c=0
当c9或int(i[x])<0:
周围。移除(i)
c-=1
c+=1
近=假
对于范围内的i(len(约)):
如果电路板[i][0]][i][1]]==“-”或“m”或“h”:
持续
其他:
近似=真
打破
如果near==True:
返回真值
其他:
返回错误

这应该可以做到这一点

修改您正在迭代的项不起作用

我不知道你为什么有
int(I[x])
。您希望
R
C
不是整数吗

电路板[][]=“-”或“m”或“h”
始终为
,因为
“m”或“h”
始终为

您的循环最好写为:

for x, y in around:
    if x in range(10) and y in range(10):
        if Board[x][y] not in "-mh":
            return True
return False

为什么要使用第一个嵌套for循环?在将元素添加到您的周围列表时,只需执行检查9?那么,您在列表中只有有效的项,并且您不需要进一步关注this@simirimia,我该怎么做呢?从根本上说,您试图通过“将迭代器移回一个”来解决的问题是在对列表进行迭代时试图从列表中删除项所导致的问题。此外,我不知道你在哪里学会了为我写
(len(…)
,但不要这样做,不要再听别人说了。只需直接在元素上迭代。c在这里不会递增,但是当我在“c-=1”之后添加一个else语句,将c递增1时,我会收到一条错误消息,其中一个无效位置已通过(我使用(9,9)作为目标位置,因为它有两个板外值)您永远不会检查[0]情况下的
,因为你在循环开始时就增加了!我总是把事情搞砸…就像做梦一样!非常感谢您,先生:)