【问题标题】:Check my tuple of tuples and change the given value检查我的元组元组并更改给定值
【发布时间】:2020-11-22 14:11:19
【问题描述】:

所以,我正在玩 tic tac toe 游戏,其中包含 3 个元组。 (3x3 矩阵)

我的功能是: def do_position(棋盘,玩家,位置): 我想用新值返回我的新板,如下所示:

棋盘 = ((1,-1,0),(1,0,-1),(1,-1,0))

do_position(board, -1, 5)

((1, -1, 0), (1, -1, -1), (1, -1, 0))

board 是我的元组,player 是一个值(-1(对于 0 玩家)或 1(对于 X 玩家),position 是我想要放置 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

有人可以帮忙吗?

【问题讨论】:

  • 能给def do_position(board, player, position):功能码吗??
  • 你正在返回 newboard。当您对 newboard 进行更改时??
  • @akash 对!我没有!我需要一些东西来查看我的位置是否为 0,以便我可以为玩家更改该位置(-1 或 1)
  • 如果它满足您的需求,请查看答案

标签: python list indexing tuples


【解决方案1】:

元组是不可变的,这意味着您不能更改元组的值。

所以到目前为止你有 3 个选项 --

  1. 重新生成具有更改值的板。
  2. 将元组转换为列表,进行更改并转换回元组
  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)

【讨论】:

  • 谢谢@akash!只有一件事,我的董事会是一个元组。我需要在函数里面放那个对吗?我希望发生这种情况: >board = ((1,-1,0),(1,0,-1),(1,-1,0)) >do_position(board, -1, 5)
  • 只需转换tuple --> list --> tuple
  • @CateC 我已经更新了我的答案。如果没问题,请检查为正确答案
  • 谢谢!你帮了我很多!你能帮我再问一个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2014-05-21
  • 2012-07-20
相关资源
最近更新 更多