坐标分配不正确(Python 3.3)



我一直很难编写Python中基于文本的RPG的代码。该RPG使用每个位置的类,以及一个功能来扫描游戏目录中的地图,并将它们添加到3D大列表中。该3D列表的每个元素都是列表本身,具有4个值:坐标,名称,简短描述和地图的原始数据。

但是,当我使用该函数更新此映射时,尽管似乎正确地运行,在打印列表的元素时,它并未显示预期值。

我在/地图文件夹子目录中有4个测试映射。

我将问题减少到以下代码:

# 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包含100个对单个y_list的引用。因此,更改将使它们看起来像所有的变化。同样,您的y_list包含100个对单个z_list的引用。

您可能想要这样的东西:

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

最新更新