我有一本字典,我想用它來更改矩陣,因此我不必手動撰寫一堆 if 陳述句。但是,該程式無法識別它。
player_board = [["", "A", "B", "C", "D", "E", "F", "G", "H"],
["1", " ", " ", " ", " ", " ", " ", " ", " "],
["2", " ", " ", " ", " ", " ", " ", " ", " "],
["3", " ", " ", " ", " ", " ", " ", " ", " "],
["4", " ", " ", " ", " ", " ", " ", " ", " "],
["5", " ", " ", " ", " ", " ", " ", " ", " "],
["6", " ", " ", " ", " ", " ", " ", " ", " "],
["7", " ", " ", " ", " ", " ", " ", " ", " "],
["8", " ", " ", " ", " ", " ", " ", " ", " "]]
screen_encrypt = {
"A1": player_board[1][1],
"A2": player_board[2][1],
"A3": player_board[3][1],
"A4": player_board[4][1],
"A5": player_board[5][1],
"A6": player_board[6][1],
"A7": player_board[7][1],
"A8": player_board[8][1],
"B1": player_board[1][2],
"B2": player_board[2][2],
"B3": player_board[3][2],
"B4": player_board[4][2],
"B5": player_board[5][2],
"B6": player_board[6][2],
"B7": player_board[7][2],
"B8": player_board[8][2],
}
inp = "A1"
screen_encrypt[inp] = "X"
for row in player_board:
print(row)
這是輸出:
['', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
['1', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['2', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['3', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['4', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['6', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['7', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['8', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
這是所需的輸出:
['', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
['1', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['2', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['3', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['4', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['6', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['7', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['8', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
uj5u.com熱心網友回復:
這里的問題是您只是更改screen_encrypt物件,而不是player_board直接修改物件。要解決此問題,您可以更新代碼以直接更新player_board。
例如:
player_board = [["", "A", "B", "C", "D", "E", "F", "G", "H"],
["1", " ", " ", " ", " ", " ", " ", " ", " "],
["2", " ", " ", " ", " ", " ", " ", " ", " "],
["3", " ", " ", " ", " ", " ", " ", " ", " "],
["4", " ", " ", " ", " ", " ", " ", " ", " "],
["5", " ", " ", " ", " ", " ", " ", " ", " "],
["6", " ", " ", " ", " ", " ", " ", " ", " "],
["7", " ", " ", " ", " ", " ", " ", " ", " "],
["8", " ", " ", " ", " ", " ", " ", " ", " "]]
col_header: list = player_board[0]
inp = "A1"
alpha = inp[0]
# convert string -> int
digit = int(inp[1:])
player_board[col_header.index(alpha)][digit] = 'X'
for row in player_board:
print(row)
輸出:
['', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
['1', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['2', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['3', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['4', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['6', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['7', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['8', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
uj5u.com熱心網友回復:
字串被稱為不可變的,它們不能被改變。如果使用可變物件,則可以更改它。最簡單的可變物件是一個list:
player_board = [["", "A", "B", "C", "D", "E", "F", "G", "H"],
["1", [" "], [" "], [" "], [" "], [" "], [" "], [" "], [" "]],
["2", [" "], [" "], [" "], [" "], [" "], [" "], [" "], [" "]],
["3", [" "], [" "], [" "], [" "], [" "], [" "], [" "], [" "]],
["4", [" "], [" "], [" "], [" "], [" "], [" "], [" "], [" "]],
["5", [" "], [" "], [" "], [" "], [" "], [" "], [" "], [" "]],
["6", [" "], [" "], [" "], [" "], [" "], [" "], [" "], [" "]],
["7", [" "], [" "], [" "], [" "], [" "], [" "], [" "], [" "]],
["8", [" "], [" "], [" "], [" "], [" "], [" "], [" "], [" "]]
然后你可以說
screen_encrypt[inp][0] = "X"
哪個會做你想做的。
如果你想獲得更多的 Pythonic,你可以創建一個Cell物件:
class Cell:
def __init__(self):
self.value = " "
def __str__(self):
return self.value
player_board = [["", "A", "B", "C", "D", "E", "F", "G", "H"],
["1", Cell(), Cell(), Cell(), Cell(), Cell(), Cell(), Cell(), Cell()],
["2", Cell(), Cell(), Cell(), Cell(), Cell(), Cell(), Cell(), Cell()],
["3", Cell(), Cell(), Cell(), Cell(), Cell(), Cell(), Cell(), Cell()],
#... etc
然后你會說
screen_encrypt[inp].value = "X"
您必須修改顯示代碼以呼叫str()每個單元格以將其轉換為漂亮的格式:
for row in player_board:
for cell in row:
print(str(cell), end=" ")
print()
uj5u.com熱心網友回復:
你不能使用字典,但你可以使用這樣的函式:
player_board = [["", "A", "B", "C", "D", "E", "F", "G", "H"],
["1", " ", " ", " ", " ", " ", " ", " ", " "],
["2", " ", " ", " ", " ", " ", " ", " ", " "],
["3", " ", " ", " ", " ", " ", " ", " ", " "],
["4", " ", " ", " ", " ", " ", " ", " ", " "],
["5", " ", " ", " ", " ", " ", " ", " ", " "],
["6", " ", " ", " ", " ", " ", " ", " ", " "],
["7", " ", " ", " ", " ", " ", " ", " ", " "],
["8", " ", " ", " ", " ", " ", " ", " ", " "]]
def boardUpdate(position, value, board):
colPositions = {"A":1,"B":2,"C":3,"D":4,"E":5,"F":6,"G":7, "H":8}
index1 = colPositions[position[0]]
index2 = position[1]
board[int(index1)][int(index2)] = value
return board
result = boardUpdate("A1", "X", player_board)
for row in result:
print(row)
輸出:
['', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
['1', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['2', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['3', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['4', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['6', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['7', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
['8', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387576.html
上一篇:迭代字典的查詢集
下一篇:字典理解Python
