我正在开发一个基于对象的战舰程序,但我认为这并不重要。我把船放在我的船上,一个二维列表。我有一个条件,以避免船舶以外的董事会和相互重叠。问题是,相同的机制适用于水平方向,但不适用于垂直方向(用户必须首先输入方向)。条件计算所需位置是否为“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)
目前没有回答
相关问题 更多 >
编程相关推荐