#python #list #indexing #tuples
#python #Список #индексирование #Кортежи
Вопрос:
Итак, я играю в крестики-нолики с кортежем из 3 кортежей. (матрица 3×3)
моя функция: определить do_position(доска, игрок, позиция): Я хочу вернуть свою новую плату с новым значением, например:
доска = ((1,-1,0),(1,0,-1),(1,-1,0))
do_position(доска, -1, 5)
((1, -1, 0), (1, -1, -1), (1, -1, 0))
доска — это мой кортеж, игроком будет значение (-1 (для 0 игроков) или 1 (для X игроков)), а позиция — это позиция моего кортежа, где я хочу поместить свой int (-1 или 1).
Я знаю, что мне нужно превратить свой кортеж в списки, чтобы я мог достичь нужной позиции, но я перепробовал много способов, и мой вывод по-прежнему возвращает мою исходную плату без каких-либо изменений. Вот одна из моих попыток:
def do_position(board,player, position):
newboard = ()
position=[1,2,3,4,5,6,7,8,9]
player = (-1,1)
for p in position:
board[position[p]-1] = player[p]
for position,player in enumerate(board):
if player == 1:
board[position] = 1
elif player == -1:
board[position] = -1
return newboard
Кто-нибудь может помочь?
Комментарии:
1. Можете ли вы дать
def do_position(board, player, position):
код функции??2. вы возвращаете newboard . когда вы вносили изменения в newboard ??
3. @akash правильно! я этого не сделал! И мне нужно что-то, чтобы увидеть, равна ли моя позиция 0, чтобы я мог изменить эту позицию для игрока (-1 или 1)
4. проверьте ответ, если он соответствует вашим потребностям
Ответ №1:
кортеж неизменяем, что означает, что вы не можете изменить значение кортежа.
Итак, у вас пока есть 3 варианта —
- Восстановите плату с измененным значением.
- преобразуйте кортеж в список, внесите изменения и преобразуйте обратно в кортеж
- Используйте изменяемую коллекцию python, подобную списку
board = [[1,-1,0],[1,0,-1],[1,-1,0]]
Альтернативный рабочий код:
def do_position(board,player, position):
position-=1
row,col=position//3,position%3
board[row][col]=player
return board
board = [[1,-1,0],[1,0,-1],[1,-1,0]]
do_position(board, -1, 3)
Для доски кортежей :
def tuple_to_list(board):
return [list(x) for x in board]
def list_to_tuple(board):
return tuple([tuple(x) for x in board])
def do_position(board,player, position):
temp_board=tuple_to_list(board)
position-=1
row,col=position//3,position%3
temp_board[row][col]=player
return list_to_tuple(temp_board)
board = ((1,-1,0),(1,0,-1),(1,-1,0))
do_position(board, -1, 3)
Комментарии:
1. Спасибо @akash! только одна вещь, моя доска — это кортеж. Мне нужно поместить внутри функции это правильно? Я хочу, чтобы это произошло: > доска = ((1,-1,0),(1,0,-1),(1,-1,0)) > do_position(доска, -1, 5)
2. просто преобразуйте
tuple --> list --> tuple
3. @CateC я обновил свой ответ. если все в порядке, проверьте как правильный ответ
4. Спасибо! вы мне очень помогли! Можете ли вы помочь мне с еще одним вопросом?