2015-12-04 30 views
0

我必須編寫一個函數(def)來檢查我編寫的索引是否在2d列表中。如果是,則必須返回True,否則必須返回False。檢查索引是否在2d列表中[Python]

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"]] 

回答

2

最簡單的方法是用try..except..else,這將試圖訪問在黑板上那個地方。如果它有效,它是一個有效的位置,並且將輸入else塊。如果沒有,則不會,並且將會輸入except塊。作爲獎勵,您還可以檢查xy是否爲有效整數。這裏的任何失敗都會產生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(含),並在板的行(數非-包括的)。然後它返回這兩個條件是否爲真的布爾值。

+0

作爲一個建議,OP可以創建一個'Board'類並在其中封裝一些這些細節。 – ray

+0

我得到這個錯誤: board [int(x)] [int(y)] IndexError:列表索引超出範圍 –

+0

我必須編輯:除了ValueError,IndexError:除了ValueError爲IndexError。因爲:「Python 3.4版本不支持此語法。」 –

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 
+0

我收到此錯誤: AssertionError:True不是false –