Создание словаря для определенных позиций символов в файле

#python #python-3.x #class #dictionary #pygame

#python #python-3.x #класс #словарь #pygame

Вопрос:

Я пытаюсь выполнить поиск в файле экземпляра #, M,K, O, D и для каждого экземпляра возвращаю {позиция (кортеж), тип экземпляра (#, M,K, O, D)} в словаре. Я написал функцию для поиска координат экземпляра в файле, однако я не уверен, как добавить и обновить весь словарь с помощью этой информации. Это то, что у меня есть до сих пор:

 def init_game_information(dungeon_name="game1.txt"):
        self._dungeon=load_game(dungeon_name)
        game_dict={}
        with open("game1.txt", "r") as file:
            for line in file:
                for row, line in enumerate(self._dungeon):
                    for col, char in enumerate(line):
                        if WALL in line:
                            x=WALL
                            y=get_positions(self, WALL)
                            dict_WALL={y,x}
                        game_dict.update(dict_WALL)
                        if KEY in line:
                            x=KEY
                            y=get_positions(self, KEY)
                            KEY={y,x}
                        game_dict.update(dict_KEY)
                        if DOOR in line:
                            x=DOOR
                            y=get_positions(self, DOOR)
                            dict_DOOR={y,x}
                        game_dict.update(dict_DOOR)
                        if MOVE_INCREASE in line:
                            x=MOVE_INCREASE
                            y=get_positions(self, MOVE_INCREASE)
                            dict_MOVE={y,x}
                        game_dict.update(dict_MOVE)
                
            
def get_positions(self, entity):
    """ Returns a list of tuples containing all positions of a given Entity
         type.

    Parameters:
        entity (str): the id of an entity.

    Returns:
        )list<tuple<int, int>>): Returns a list of tuples representing the 
        positions of a given entity id.
    """
    positions = []
    for row, line in enumerate(self._dungeon):
        for col, char in enumerate(line):
            if char == entity:
                positions.append((row,col))

    return positions
  

и это пример файла игры / что должно быть возвращено:

Комментарии:

1. У вас есть классы для Wal , Door , …?

Ответ №1:

Вы можете задать значение для ключа в словаре с помощью dictionary[key] = value . Определите ключ с помощью row и col и свяжите его со словарем:

 keys = [WALL, KEY, DOOR, MOVE_INCREASE]
game_dict = {}
with open("game1.txt", "r") as file:
    for row, line in enumerate(file):
        for col, char in enumerate(line):

            if char in keys:
                game_dict[(row, col)] = char
  

Если у вас есть классы для объекта ( Wall , Key , …), то вы можете сделать что-то вроде:

 class_dict = { WALL : Wall, KEY : Key, DOOR : Door, MOVE_INCREASE: MoveIncrease}

game_dict = {}
with open("game1.txt", "r") as file:
    for row, line in enumerate(file):
        for col, char in enumerate(line):

            if char in class_dict:
                game_dict[(row, col)] = class_dict[char](char)

print(game_dict)
  

Комментарии:

1. Спасибо! Есть ли в любом случае возможность для функции пропустить экземпляр, в котором есть пустое пространство / ничего, и ничего не добавлять в словарь, поскольку ошибка, с которой я сталкиваюсь, — «AssertionError: None не является экземпляром <class’dict’>»

2. @kit01 я в замешательстве. Откуда вы получаете эту ошибку. В общем, вам нужно просто протестировать if key != None: . Но я не знаю, откуда вы получаете эту ошибку и что на самом деле является вашим ключом.