Функция выводит кавычки и фигурные скобки в этом для функции цикла в Python - PullRequest
0 голосов
/ 14 сентября 2018

Функция see_inventory () печатает кавычки в цикле for внутри него, как мне сделать так, чтобы функция печатала список без кавычек? Кстати, я начинающий.

class Person:

    equipped_armor = {
    "head": {"name": "cap", "defense": 1},
    "chest": {"name": "mail", "defense": 2},
    "legs": {"name": "wooden leggings", "defense": 1},
    }
    gold = 10


    stored_armor = {"Stored Armor: ": ["rash leggings"]}
    weapons = {"Weapons: ": ["wooden_sword", "mythrill_staff"]}
    potions = {"Potions: ": ["HP potion"]}
    ui_gold = {"Gold: ": gold}

    inv = [
        stored_armor,
        weapons,
        potions,
        ui_gold
    ]

    def __init__(self):
        self.name = "Cavalex"

    def see_inventory(self):
        for element in self.inv:
            print(element)

Запустив это:

player = Person()
player.see_inventory()

Я понял:

{'Stored Armor: ': ['rash leggings']}
{'Weapons: ': ['wooden sword', 'mythril staff']}
{'Potions: ': ['HP potion']}
{'Gold: ': 10}

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Во-первых, давайте уменьшим ваш пример; структура класса несущественна для проблемы.

gold = 10
stored_armor = {"Stored Armor: ": ["rash leggings"]}
weapons = {"Weapons: ": ["wooden_sword", "mythrill_staff"]}
potions = {"Potions: ": ["HP potion"]}
ui_gold = {"Gold: ": gold}

inv = [ 
    stored_armor,
    weapons,
    potions,
    ui_gold
]

Теперь вы пытаетесь распечатать список элементов без пунктуации, которая естественным образом достигается в выбранном вами хранилище данных. Чтобы сделать это, вы должны добраться до внутри , где хранится, и переформатировать элементы так, как вы хотите их видеть.

В этом случае это не qwuite тривиально, так как вы выбрали неоднородную структуру для рюкзака вашего игрока: список словарей, значения которых имеют разные типы. Я решил эту проблему, поочередно просматривая список (после исправления неверно введенного имени переменной) и проверяя тип значения перед построением вывода.

for element in inv:
    for key, val in element.items():
        if type(val) == list:
            inventory = ' '.join([item for item in val])
        else:
            inventory = str(val)

        print(key, inventory)

Выход:

Stored Armor:  rash leggings
Weapons:  wooden_sword mythrill_staff
Potions:  HP potion
Gold:  10
0 голосов
/ 14 сентября 2018

Вот, пожалуйста, просто внесите небольшое изменение в see_inventory, и работа будет выполнена

def see_inventory(self):
    for element in self.inv:
        for k, v in element.items():
            if type(v) == list:

                print(k, ' '.join(v))
            else:
                print(k, v)

выход

(xenial)vash@localhost:~/python$ python3.7 armor.py 
Stored Armor:  rash leggings
Weapons:  wooden_sword mythrill_staff
Potions:  HP potion
Gold:  10
0 голосов
/ 14 сентября 2018

Вот очень простой способ сделать это.

str(player.see_inventory()).replace("'", "")

Или в функции что-то вроде:

print(str(element).replace("'", ""))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...