我必须写一个函数(def)来检查我写的索引是否在2d列表中。如果是,则必须返回True,否则必须返回False。
def height(board):
height=0
for x in board:
height+=1
return height
def width(board):
wid=len(board[0])
return wid
def on_board(board, x, y):
check=False
x1 = int(x)
y1 = int(y)
for x,y in board:
if x1 > height(board) or y1 > width(board):
check=False
else:
check=True
return check
列表看起来像这样:
board = [["V1", "V1"],
["V2", "V2"],
["V3", "V3"]]
答案 0 :(得分:2)
最简单的方法是使用try..except..else
,它会尝试访问主板上的那个位置。如果有效,则为有效位置,并输入else
块。如果不是,则不是,并且将输入except
块。作为奖励,您还可以检查x
和y
是否为有效整数。任何失败都会产生False
。
def on_board(board, x, y):
try:
board[int(x)][int(y)]
except (ValueError, IndexError):
return False
else:
return True
此外,电路板的高度仅为def height(board): return len(board)
。但是,如果height()
只有width()
和on_board()
,那么您根本不需要height()
和width()
。
作为determined in chat,正在检查程序的测试套件使用0索引的行和列,就像我们一样,但第一个值是列(如图上的x坐标)和第二个值是行。它也不接受用户的-1
索引来指示最后一行/列。最后,它已经使用整数测试函数,因此不需要使用int()
进行强制转换。
def on_board(board, x, y):
return x in range(len(board[0])) and y in range(len(board))
检查x
是否在0
(包括)与行数之间的列数(不包括)之间,以及y
是否在0
之间(包括)和电路板中的行数(不包括在内)。然后它返回两个条件是否为真的布尔值。
答案 1 :(得分:0)
您可以使用您编写的两种方法,然后您的on_board
方法可以简单地检查
def height(board):
return len(board)
def width(board):
return len(board[0])
def on_board(board, x, y):
return x < width(board) and y < height(board)
例如
>>> board = [["V1", "V1"],
["V2", "V2"],
["V3", "V3"]]
>>> on_board(board, 1, 0)
True
>>> on_board(board, 3, 4)
False