Python 在变量中存储数组位置

Python 在变量中存储数组位置,python,arrays,Python,Arrays,我正在使用Python构建一个简单的游戏,使用2D数组作为棋盘。我的用户可以输入数字来播放,但这些数字与棋盘上的某个位置没有很好的相关性 我是否可以将数组的位置存储在变量中,这样就不必在每次检查条件时都写出board[x][y] 因此,不是: if num == 1: if board[3][5] == "Z": print "Not empty!" else board[3][5] = "Z" 我可以使用: if num == 1:

我正在使用Python构建一个简单的游戏,使用2D数组作为棋盘。我的用户可以输入数字来播放,但这些数字与棋盘上的某个位置没有很好的相关性

我是否可以将数组的位置存储在变量中,这样就不必在每次检查条件时都写出board[x][y]

因此,不是:

if num == 1:
    if board[3][5] == "Z":
        print "Not empty!"
    else 
        board[3][5] = "Z"
我可以使用:

if num == 1:
    if locationOf1 == "Z":
        print "Not Empty!"
    else
        locationOf1 == "Z"
我只想让Location1告诉我board[3][5]在哪里。如何做到这一点

[编辑]甚至更好(这可能吗?):


一种简单的方法是为2D数组创建包装器类。封装将赋予您的游戏板以意义,并且更易于使用

例如


好的,因为您已经有了一个数组供您使用,所以您无法更快地进行查找,因为您已经有了一个固定的查找时间。我将使用键为std::string、值为int*(c++)的映射,将形式为“locationO1”的字符串映射到指向内存中实际地址的整数指针。

基于键存储信息的最简单方法是dict。您可以将值保存为元组:

locations = {1: (3, 5), 2: (4,3)}

def get_location(num):
    x, y = locations.get(num, (-1, -1, ))
    if coords != (-1,-1): 
       return board[x,y]
    else:
       return None

如果我理解正确,您希望将棋盘坐标映射为单个值,我想这对游戏有一定意义,因为x,y坐标听起来很简单

我会静态地映射这些坐标,以使用一个dict对电路板进行建模,并将另一个dict映射到当前的电路板状态:

from collections import defaultdict

board = {
    1: (1, 2),
    3: (3, 4)
}

board_state = defaultdict(str)
然后只需使用位置[x]来获取或设置状态(“Z”)

更新

def set_value(val, pos):
    assert pos in board
    board_state[pos] = val

def get_value(pos):
    assert pos in board
    return board_state[pos]

为了说明一个用例,您当然可以使用board_状态。这里的断言是可选的,取决于您的代码,您可以在其他地方(用户输入等)验证该断言。

您可能只需要编写一个方法,从播放机接收一个数字并将其转换到正确的棋盘位置。你的方法可以在黑板上返回正确的位置。感谢你的建议,这是我已经在做的事情——它不干净。我有10条if语句,希望代码更简洁。理想情况下,我可以将阵列位置存储在一个阵列中,这样位置[num]实际上指的是电路板[][]中的一个位置。在我看来,
locations[n]
board[x][y]
要花费更多的精力来编写。前者长了一个字符。在我看来不像
Python
)(参见标签)哈哈,我怎么会在这里结束。我现在正在编写Java,所以我实现了飞跃。我的错误。但战略仍然适用。
from collections import defaultdict

board = {
    1: (1, 2),
    3: (3, 4)
}

board_state = defaultdict(str)
def set_value(val, pos):
    assert pos in board
    board_state[pos] = val

def get_value(pos):
    assert pos in board
    return board_state[pos]