Python 在变量中存储数组位置
我正在使用Python构建一个简单的游戏,使用2D数组作为棋盘。我的用户可以输入数字来播放,但这些数字与棋盘上的某个位置没有很好的相关性 我是否可以将数组的位置存储在变量中,这样就不必在每次检查条件时都写出board[x][y] 因此,不是: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:
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]