gpt4 book ai didi

python - 坐标未正确分配(Python 3.3)

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:38 26 4
gpt4 key购买 nike

我在用 Python 编写基于文本的 RPG 代码时遇到了麻烦。这个 RPG 对每个位置使用一个类,并使用一个函数来扫描游戏目录中的 map 并将它们添加到一个大的 3D 列表中。此 3D 列表的每个元素本身就是一个列表,具有 4 个值:坐标、名称、简短描述和 map 的原始数据。

但是,当我使用该函数更新此 map 时,尽管看起来运行正确,但在打印列表的元素时,它没有显示预期值。

我的/maps 文件夹的子目录中有 4 个测试 map.txt 文件,我已经对每个文件的坐标准确性进行了三次检查。

我已将问题简化为以下代码:

# Imports:
import os
import sys
from random import randint


# Definitions

def create_maps_list():
"""Creates a blank list of 100*100*100 zeros."""
x_list, y_list, z_list, attr_list = [], [], [], []

for _ in range(4):
attr_list.append(0)

for _ in range(100):
z_list.append(attr_list)

for _ in range(100):
y_list.append(z_list)

for _ in range(100):
x_list.append(y_list)
global maps_list
maps_list = x_list

def update_maps_list(maps_list):
"""Updates maplist by scanning the maps dir."""
listdirs = os.listdir(os.getcwd() + "\maps") # List folder names in /maps
for mapdir in listdirs:
mapfile = open("maps/{0}/map.txt".format(mapdir)) # Open map.txt
linelist = list(mapfile)
desc = open("maps/{0}/description.txt".format(mapdir)).read()
mapdata = linelist[2:]
name = linelist[1]
coordsline = linelist[0]
coords = []
for num in coordsline.split():
coords.append(int(num))
x = coords[0]
y = coords[1]
z = coords[2]
print("Name: ", name, "Assigned to coords: ", coords, "\n")
maps_list[x][y][z] = [coords, name, desc, mapdata]
return maps_list


# Assignments:
maps_list = []
list_data = []


# Execution
create_maps_list()
maps_list = update_maps_list(maps_list)


# Output
print()
print("Expected output: [0, 0, 0] Initial Building.")
print(maps_list[0][0][0][0], maps_list[0][0][0][1])

实际输出如下:

Name:  East Building
Assigned to coords: [1, 0, 0]

Name: Heaven!
Assigned to coords: [0, 0, 1]

Name: Initial Building
Assigned to coords: [0, 0, 0]

Name: North Building
Assigned to coords: [0, 1, 0]


Expected output: [0, 0, 0] Initial Building.
[0, 1, 0] North Building

[Finished in 0.3s]

任何帮助将不胜感激(包括与问题没有直接关系的帮助 - 我偷偷怀疑以这种方式存储坐标并不是最好的做法!)

最佳答案

您的 x_list 包含对单个 y_list 的 100 个引用。因此,改变一个就会让所有的人看起来都变了。同样,您的 y_list 包含对单个 z_list 的 100 个引用。

你可能想要这样的东西:

maps_list = [[[[0 for i in range(4)] for z in range(100)] for y in range(100)] for x in range(100)]

关于python - 坐标未正确分配(Python 3.3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247005/

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