首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Python3)在python数组上存储10x10游戏地图

(Python3)在python数组上存储10x10游戏地图
EN

Stack Overflow用户
提问于 2018-05-15 04:05:43
回答 2查看 1.2K关注 0票数 0

如何将10x10 (100个单元)游戏地图存储在2D python3数组上?

以下是我的当前代码:

代码语言:javascript
复制
53    worldMap = [[13, 13, 13, 13, 13, 13, 13, 13, 13, 13], [13, 13, 13, 
                    13, 13, 13, 13, 13, 13, 13]]
236    porq = 0
237 genX = 0
238 genY = 0
239 
240 #world generator
241 while not 13 in worldMap:
242     porq = porq + 1
243     genIncoming = randint(1, 12)
244     worldMap[genX][genY] = genIncoming
245     genX = genX + 1
246     genY = genY + 1
247 print(worldMap)

正在抛出错误:

“回溯(最近一次调用):文件"python",第244行,在IndexError:列表索引超出范围内”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-15 04:24:39

您需要嵌套的两级for-循环才能通过映射。您只生成映射对角线上的块,即生成(0,0)、(1,1)、(2,2)、.的映射,这也解释了超出范围误差的索引。

尝尝这个

代码语言:javascript
复制
for genX in range(10):
    for genY in range(10):
        worldMap[genX][genY] = randint(1, 12)
票数 0
EN

Stack Overflow用户

发布于 2018-05-15 04:37:59

因此,从你目前的问题内容来看,我们无法确切地说出你的总体最终目标是什么。我将在这样的假设下工作:您希望用Python表示一个n x n矩阵,并在其中包含一些数字。我将用数字13填充这个矩阵,你可以根据需要修改它。

矩阵基本上是行和列,如下所示

代码语言:javascript
复制
13 13 13
13 13 13
13 13 13

这是一个3x3矩阵,有3行3列。

我可以用集合(列表列表、元组列表、元组列表等)来表示矩阵。每个内部集合代表一行。

我不会使用您想要的大小的矩阵,因为您需要能够解决它,我将使用5x5

这就是5x5矩阵在Python中的样子。

[[13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13]]

为了做到这一点,我可以做一些更短的事情

[[13 for column in range(5)] for row in range(5)]

现在,您需要一个矩阵,集合集合可能有点不必要,而且速度缓慢,让我们尝试在Python中使用这个名为numpy的库。您必须通过Python代码从源代码中安装它,或者通过pip或其他工具查找它。

假设我有我以前的列表集合,现在我不想使用它了,因为它没有必要,也有点让人困惑。我必须用我自己的代码来正确地把它打印成一个矩阵,对它做矩阵运算,等等。为什么不使用一些能为我包装的东西,比如一个numpy矩阵

代码语言:javascript
复制
import numpy as np

matrix_of_13s = np.matrix([[13 for column in range(5)] for row in range(5)]])

假设我需要访问第3行和第4列的元素,在我的集合中,这意味着我需要得到第三行,然后是第四个元素。这意味着

collection_of_13s[3][4]

如果我想运行所有的元素,我将使用@thekingofking的答案,当然,在这种情况下,只有5行5列。

代码语言:javascript
复制
for row in range(5):
    for column in range(5):
        print(collection_of_13s[row][column])

虽然这有用,但这不是我想要的。我真正想要的是一个包含我维度的13s网格。因此,为什么不使用这样的numpy矩阵呢?

代码语言:javascript
复制
matrix_of_13s = np.matrix(collection_of_13s)
for element in np.nditer(matrix_of_13s):
    print(element)

它将遍历矩阵中的每一个元素,从左到右按行顺序排列。

您还会注意到,随着项目规模的扩大,numpy更高效、更易于使用,有原因

我还想再提一个选项,这是一个超级简单的概念,您不需要任何集合集合或numpy。只需使用一维数组来表示网格。这个概念实际上用于图像的主成分分析,但这是不相关的。

从本质上说,13s的网格只是一个正常的列表。

代码语言:javascript
复制
[13, 13, 13, 13, 13, 13, 13, 13, 13]

任何元素的新索引都是(column +1)*(row)。这有一个数学证明和解释,但我现在不想找到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50342166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档