Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
坐标为';t被正确分配(Python 3.3)_Python - Fatal编程技术网

坐标为';t被正确分配(Python 3.3)

坐标为';t被正确分配(Python 3.3),python,Python,我在用Python编写基于文本的RPG代码时遇到了麻烦。这个RPG为每个位置使用一个类和一个函数来扫描游戏目录中的地图,并将它们添加到一个大的3d列表中。这个3d列表的每个元素本身就是一个列表,有4个值:坐标、名称、简短描述和地图的原始数据 但是,当我在打印列表元素时使用函数更新此映射时,尽管看起来运行正常,但它不会显示预期值 我在/maps文件夹的子目录中有4个test map.txt文件,我对每个文件的坐标精度进行了三次检查 我已将问题简化为以下代码: # Imports: import o

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

但是,当我在打印列表元素时使用函数更新此映射时,尽管看起来运行正常,但它不会显示预期值

我在/maps文件夹的子目录中有4个test 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\u列表包含对单个y\u列表的100个引用。因此,改变一个会使它看起来像所有的改变。类似地,y_列表包含对单个z_列表的100个引用

你可能想要这样的东西:

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

请看这个问题:另外,关于如何存储坐标的问题-除非您计划填写正在分配的近百万个条目,否则最好将它们存储为dict,其中键是元组(x,y,z)。最后的4元素列表可能是它自己的类。但这是可读性/可维护性问题,而不是内存或性能问题。