更改列表索引时出现的问题

2024-05-15 08:20:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个基于对象的战舰程序,但我认为这并不重要。我把船放在我的船上,一个二维列表。我有一个条件,以避免船舶以外的董事会和相互重叠。问题是,相同的机制适用于水平方向,但不适用于垂直方向(用户必须首先输入方向)。条件计算所需位置是否为“0”或其他值,因此索引的范围从用户给定的范围开始,直到船的大小(由给定的用作船名)

字段/板/地图是这样构造的

    self.Field = [[0 for i in range(N)] for j in range(N)]

我得到了这些输入,其中一个与一个字典有关,字典给出了一个整数,根据船名来表示船的大小。我把这个值ship[size]放在变量tam中。这个tam稍后用于第二个if中的评估。在这里你可以找到一个有条件的边和另一个重叠。当我运行这个命令时,它会给“list index is out of range”一个错误,第三个if也会这样做,但是对于水平方向,它工作得很好。问题是,经过一些调试后,区别在于F[a:b][c]F[a][b:c]工作时不工作。这是我的问题,为什么?我已经用numpy数组解决了这个问题,它可以正常工作

    while(o != 5):
        size = input("What is your ship ?").replace(" ", "")
        tam = ship[size]
        orient = input("It is on the vertical or horizontal ? v or h: ").replace(" ", "")
        posit = input("Considering a top/left orientation as the begining, tell me where it starts: Letter and Number as A01  ").replace(" ", "")
        positA, posit1 = posit[:1], int(posit[1:])
        if orient == 'v':                
            if (N - coordv[positA]) < tam or any(self.Field[coordv[positA]:(coordv[positA] + tam - 1)][posit1]) != 0:
                print("Irregular positon, try again")
            else:
                for p in range(tam):
                    self.Field[coordv[positA] + p][posit1] = size[0:2]
                o = o + 1
                npField = np.array(self.Field, dtype=object) 
                print(npField)

        elif orient == 'h':
            if (N - int(posit1)) < tam or any(self.Field[coordv[positA]][posit1:posit1 + tam - 1]) != 0:
                print("Irregular positon, try again")
            else:
                for p in range(tam):
                    self.Field[coordv[positA]][posit1 + p] = size[0:2]
                o = o + 1

                npField = np.array(self.Field, dtype=object) 
                print(npField)

Tags: orinselffieldforsizeifrange