gpt4 book ai didi

python - (Python) 从文件创建二维列表( map )

转载 作者:行者123 更新时间:2023-11-28 17:39:12 24 4
gpt4 key购买 nike

所以我试图让我的程序读取文本文件的元素,然后使用文本文件的元素创建一个 20x30 的二维列表。我的预期结果基本上是一张游戏 map ,我可以在其中找到某些元素并根据需要移动它们。

到目前为止,我尝试执行此操作的两个功能如下,但我似乎无法让它做我想做的事,而且我有点困惑为什么我可以'

def create_level(level):
""" Create the level based off of reading positions of agents, player, buildings
water, etc..."""

a_maze = []

level_data = level.read()
for r in range (0, ROWS, 1):
a_maze.append ([])
for c in range (0, COLUMNS, 1):
a_maze[r].append (level_data)
print(a_maze)



def load_level():
while True:
print("Enter the name/directory of the level file you wish to load\
.txt or .lvl are the only accepted formats")

level_in = input(">>: ")
if (level_in.endswith(".txt") or level_in.endswith(".lvl")):
try:
level = open(level_in, "r")

except IOError:
print("Not a valid file")
else:
print("Not a suitable format for level")

return level

最佳答案

您在这里缺少的是文件的解析。 open 在 python 中所做的就是创建一个文件对象(在本例中为文本文件对象),您可以读取或写入该文件对象。假设 map 中的每个图 block 都是一个单独的字符,并且每一行都是 map 的整个宽度,下面是逐行构建 map 的方法:

your_map = []
with open(level_in, 'r') as level:
for line in level:
your_map.append([a for a in line.split()])

编辑:如果您的 map 文件在图 block 之间根本没有分隔符,只需将附加行更改为:

your_map.append(list(line))

Padraic Cunningham 还建议可以像这样进一步压缩 your_map 赋值,并使用分隔符:

your_map = [line.split(your_delimiters) for line in level]

或者像这样,没有分隔符:

your_map = [list(line) for line in level]

这两者都将完全消除对 for 循环的需要。

一些注意事项:

with 关键字用于在您完成处理后自动销毁文件对象等对象 - 这比必须记住在之后调用 level.close() 更容易和更安全你完成了。

for line in level逐行遍历文件对象,到达文件末尾时自动结束。

[a for a in line.split] 是一个列表理解,但在这种情况下归结为您正在创建一个新列表,其中每个索引都是行字符串中的非空格标记。

我在上面编写的这段代码做出了几个假设 - 首先,您的文本文件在每一行中都有相同数量的图 block ,其次,每个图 block 与前一个图 block 之间用空格分隔。这是我想象的一个例子:

` ` ` o # ` . . .
` ` o # # # . . .
` o # # # # # . .

其中任何给定的字符对应于 say、desert、water 等。

关于python - (Python) 从文件创建二维列表( map ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27006638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com