2016-10-16 3 views
0

Ich versuche, ein Spiel von Scrabble zu machen. Ich habe eine Tafel, wie unten definiert.Entfernung zu nicht leeren Gegenstand in zweidimensionalen Liste Spalte

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

Mein Ziel ist es, aus jedem Buchstaben die Entfernung zum nächsten Buchstaben zu finden. Zum Beispiel, wenn ich die Funktion auf B genannt, würde es zurückgeben

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

Ich habe mit dem experimentiert eingebauten in next Funktion, aber ich denke, meine Frage ist, gibt es eine einfache Möglichkeit, die Spalte von a zu erhalten zweidimensionale Liste?

Ich habe auch eine Liste der Dinge, die als leer betrachtet werden sollten:

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

Bitte helfen. Ich danke dir sehr!

Antwort

1

Sie könnten next, verwenden und die Spalte mit [row[col_num] for row in board] wie folgt extrahieren:

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')) 

Die Argumente der Funktion sollte H die Zeilennummer (8) und Spaltennummer (8) oder die entsprechenden Buchstaben sein.

Um zu prüfen, ob ein Quadrat leer ist, prüft die Funktion, ob der Inhalt kein einzelner Buchstabe (A-Z) ist.

Sehen Sie es unter repl.it

+0

Vielen Dank! Das hat eine Tonne geholfen! – rassar

Verwandte Themen