2016-10-16 4 views
0

私はスクラブルのゲームを作ろうとしています。私は以下のようなボードを持っています。2次元リストの列の空でないアイテムとの距離を取得

self.board = [[" ", "A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "I ", "J ", "K ", "L ", "M ", "N ", "O "], 
    ['01', 'TWS', ' ', ' ', 'DLS', ' ', ' ', ' ', 'TWS', ' ', ' ', ' ', 'DLS', ' ', ' ', 'TWS'], 
    ['02', ' ', 'DWS', ' ', ' ', ' ', 'TLS', ' ', ' ', ' ', 'TLS', ' ', ' ', ' ', 'DWS', ' '], 
    ['03', ' ', ' ', 'DWS', ' ', ' ', ' ', 'DLS', ' ', 'DLS', ' ', ' ', ' ', 'DWS', ' ', ' '], 
    ['04', 'DLS', ' ', ' ', 'DWS', ' ', ' ', ' ', 'DLS', ' ', ' ', ' ', 'DWS', ' ', ' ', 'DLS'], 
    ['05', ' ', ' ', ' ', ' ', 'DWS', ' ', ' ', ' ', ' ', ' ', 'DWS', ' ', ' ', ' ', ' '], 
    ['06', ' ', 'TLS', ' ', ' ', ' ', 'TLS', ' ', ' ', ' ', 'TLS', ' ', ' ', ' ', 'TLS', ' '], 
    ['07', ' ', ' ', 'DLS', ' ', ' ', ' ', 'DLS', ' ', 'DLS', ' ', ' ', ' ', 'DLS', ' ', ' '], 
    ['08', 'TWS', ' ', ' ', 'DLS', ' ', ' ', ' ', 'B', 'O', 'G', ' ', 'DLS', ' ', ' ', 'TWS'], 
    ['09', ' ', ' ', 'DLS', ' ', ' ', ' ', 'DLS', ' ', 'DLS', ' ', ' ', ' ', 'DLS', ' ', ' '], 
    ['10', ' ', 'TLS', ' ', ' ', ' ', 'TLS', ' ', ' ', ' ', 'TLS', ' ', ' ', ' ', 'TLS', ' '], 
    ['11', ' ', ' ', ' ', ' ', 'DWS', ' ', ' ', ' ', ' ', ' ', 'DWS', ' ', ' ', ' ', ' '], 
    ['12', 'DLS', ' ', ' ', 'DWS', ' ', ' ', ' ', 'DLS', ' ', ' ', ' ', 'DWS', ' ', ' ', 'DLS'], 
    ['13', ' ', ' ', 'DWS', ' ', ' ', ' ', 'DLS', ' ', 'DLS', ' ', ' ', ' ', 'DWS', ' ', ' '], 
    ['14', ' ', 'DWS', ' ', ' ', ' ', 'TLS', ' ', ' ', ' ', 'TLS', ' ', ' ', ' ', 'DWS', ' '], 
    ['15', 'TWS', ' ', ' ', 'DLS', ' ', ' ', ' ', 'TWS', ' ', ' ', ' ', 'DLS', ' ', ' ', 'TWS']]   

私の目標は、どの文字からも最も近い文字までの距離を見つけることです。私はBに関数を呼び出した場合、それは私がビルトインnext機能を試してきたが、私は私の質問があると思い、Aの列を取得する簡単な方法がある

{"up" : 7, "down" : 7, "left" : 7, "right" : 0} 

を返します2次元のリスト?

私も空として考慮すべきことのリストを持っている:

emptyList = "TWS", "DWS", "TLS", "DLS" 

助けてください。どうもありがとうございます!

答えて

1

あなたがnextを使用し、このような[row[col_num] for row in board]カラムを抽出することができ:

def distances(row_num, col_num): 
    letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
    if not col_num.isdigit(): 
     col_num = ord(col_num.upper()) - ord('A') + 1 
    col = [row[col_num] for row in board] 
    row = board[row_num] 
    return { 
     'right': next((i for i, c in enumerate(row[col_num+1:]) if c in letters), 15-col_num), 
     'left': next((i for i, c in enumerate(row[col_num-1:0:-1]) if c in letters), col_num-1), 
     'down': next((i for i, c in enumerate(col[row_num+1:]) if c in letters), 15-row_num), 
     'up': next((i for i, c in enumerate(col[row_num-1:0:-1]) if c in letters), row_num-1) 
    } 

print (distances(8, 'H')) 

関数の引数は、行番号(8)及び列番号(8)または対応する文字Hであるべきです。

正方形が空であることを確認するために、関数は内容が単一文字(A〜Z)でないかどうかをチェックします。

実行中

+0

ありがとうございました!これはトンを助けました! – rassar

関連する問題