Czy ktoś może mi powiedzieć, dlaczego tak jest board[x-1][y-1] == "x"
nie wykonuje? Byłem w tym od jakiegoś czasu. Błąd, który dostaję, to: TypeError: "str" does not support item assignment.
Chciałbym móc umieścić "x" w rzędzie i kolumnie wybranej przez gracza.
Oto kod:
import random
board = []
for i in range(3):
board.append("|___|"*3)
for row in board:
print row
x = int(raw_input("x: "))
y = int(raw_input("y: "))
board[x-1][y-1] = "x"
Jedno z ćwiczeń Codecademy ma podobną, choć nie identyczną linię kodu, ale nie wiem, dlaczego mój nie działa w tym przypadku.
Odpowiedzi:
1 dla odpowiedzi № 1Próbujesz edytować ciąg znaków. Dzieje się tak dlatego, że zainicjalizowałeś 1-D
nie 2-D
lista.
Aby zainicjować 2-D
listę, wykonaj to w następujący sposób:
for i in range(3):
board.append(["|___|"]*3) # Note the [] around the "|___|"
Kiedy drukujesz tablicę, powinna wyglądać tak:
["|___|", "|___|", "|___|"]
["|___|", "|___|", "|___|"]
["|___|", "|___|", "|___|"]
Wtedy twój kod będzie działał poprawnie
2 dla odpowiedzi nr 2
board[x-1][y-1] = "x"
Zarząd jest jedną listą wymiarową. Spójrz na to w ten sposób:
board[0] = "|___||___||___|"
Prawdopodobnie chcesz:
board[0] = ["|___|", "|___|", "|___|"]
Spróbuj tego:
import random
board = []
for i in range(3):
if len(board)-1 < i: board.append([])
board[i] = []
columns = board[i]
for colNum in range(3):
columns.append("|___|")
board[i] = columns
for row in board:
print(row)
x = int(raw_input("x: "))
y = int(raw_input("y: "))
board[x-1][y-1] = "| x |"
# To verify the change:
for row in board:
print(row)