У меня возникли проблемы с написанием кода для текстовой RPG в Python. Эта RPG использует класс для каждого местоположения и функцию для сканирования каталога игр для карт и добавления их в большой трехмерный список. Каждый элемент этого трехмерного списка представляет собой список, содержащий 4 значения: координаты, имя, краткое описание и необработанные данные для карты.Координаты назначены неправильно (Python 3.3)
Однако, когда я использую функцию для обновления этой карты, несмотря на то, что она работает правильно, при печати элемента списка он не отображает ожидаемые значения.
У меня есть 4 тестовых файла map.txt в подкаталогах папки my/maps, для каждой из которых я проверил тройную проверку точности координат.
Я свели задачу к коде ниже:
# 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]
Любая помощь будет высоко ценится (в том числе, которые непосредственно не связаны с вопросом - У меня есть скрытое подозрение, что хранение координат таким образом - не лучший способ сделать что-то!)
Посмотреть этот вопрос: http://stackoverflow.com/questions/1959744/python-list-problem – happydave