class Board:
def __init__(self):
self.board = self.createBoard()
def createBoard(self):
line = []
for i in range(7):
line.append(' ')
board = []
for i in range(7):
board.append(line)
return board
def showBoard(self):
line = "| "
for x in range(len(self.board)):
for y in range(len(self.board)):
line += self.board[x][y] + " | "
print("-" * 29)
print(line)
line = "| "
print("-" * 29)
if __name__ == '__main__':
board = Board()
board.showBoard()
board.board[1][1] = "O"
board.showBoard()
Pracowałem nad demo/grą w python konsoli connect-4, kiedy utknąłem w tym naprawdę dziwnym zagadnieniu.Dwuwymiarowa lista błędnie przypisująca wartości w pythonie
Wyjście powyższego kodu jest następujący:
-----------------------------
| | O | | | | | |
-----------------------------
| | O | | | | | |
-----------------------------
| | O | | | | | |
-----------------------------
| | O | | | | | |
-----------------------------
| | O | | | | | |
-----------------------------
| | O | | | | | |
-----------------------------
| | O | | | | | |
-----------------------------
Dziwne jest to, że nigdy przypisany O
do wszystkich tych pozycjach, tylko przypisuje go do pozycji [1] [1].
spodziewał I wyjście będzie:
-----------------------------
| | | | | | | |
-----------------------------
| | O | | | | | |
-----------------------------
| | | | | | | |
-----------------------------
| | | | | | | |
-----------------------------
| | | | | | | |
-----------------------------
| | | | | | | |
-----------------------------
| | | | | | | |
-----------------------------
Jest bardzo prawdopodobne, że brakuje mi czymś oczywistym i mały, ale szukałem i próbuje przez ponad godzinę, a ja naprawdę nie mogę znajdź problem.
To nie tak, że moja lista board.board jest bardziej dziwna niż jakakolwiek inna dwuwymiarowa lista.
[[' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ']]
(To co mam, kiedy print(board.board)
)
Kopiowanie i wklejanie że w IDLE otrzymuję następujący:
>>> a = [[' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ']]
>>> a[1][1] = "O"
[[' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', 'O', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ', ' ', ' ']]
które dostaje mi właściwą wartość płyty.
Co jest takiego oczywistego w moim kodzie, że go brakuje? Jestem prawie pewien, że gdy ktokolwiek z was znajdzie odpowiedź, że wstrząśnie moją głową ze wstydem, prawdopodobnie jest tak źle.
Wystarczająca ilość samokaleczenia, dlaczego mój kod board.board[1][1] = "O"
przypisuje wartość "O" do każdego wiersza w board.board
?
Zmiana pierwszego 1 na inny od 0-6 również niczego nie zmienia. To wszystko jest takie samo.
Jestem pewien, że jest to duplikat 100 innych pytań , ale niestety bardzo trudno jest znaleźć dobre warunki wyszukiwania, aby je znaleźć, więc trudno jest obwiniać kogokolwiek za powtórzenie pytania ... Niektóre z pytań z prawej strony są z pewnością powiązane, ale żaden z nich nie wydaje się być dupkami. – abarnert