Получить значение в словаре - PullRequest
0 голосов
/ 02 октября 2018

Я довольно новичок в Python, и я делаю RPG, чтобы практиковать то, что я изучаю.У меня есть словарь предметов, и я хочу получить имя одного из них, но когда я звоню, я получаю сообщение:

You don't have any<classes.inventory.Item object at 0x7f52e39bce48>left!

Мой словарь это:

player_items = [{"item":potion, "quantity": 15},
                {"item":hipotion, "quantity": 10},
                {"item":superpotion, "quantity": 8},
                {"item":elixir, "quantity": 3},
                {"item":hielixir, "quantity":1},
                {"item":grenade, "quantity": 12}]

item = player.items[item_choice]["item"]
player.items[item_choice]["quantity"] -= 1

if player.items[item_choice]["quantity"] == 0:
    print(bcolors.FAIL+"\n"+"You don't have any"+str(item)+"left!"+bcolors.ENDC)

class Item:
    def __init__(self, name, type, description, prop):
        self.name = name
        self.type = type
        self.description = description
        self.prop = prop

class Person:
    def __init__(self, hp, mp, atk, df, magic, items):
        self.maxhp = hp
        self.hp = hp
        self.maxmp = mp
        self.mp = mp
        self.atkhigh = atk+10
        self.atklow = atk-10
        self.df = df
        self.items = items
        self.magic = magic
        self.actions = ["Attack", "Magic", "Items"]

Кто-нибудь знает, что я делаю не так?Заранее спасибо за ваше время.

РЕДАКТИРОВАТЬ: Обнаружил ошибку.Мне нужно учиться больше.Мне просто нужно было добавить свойство name, когда я позвонил:

print(bcolors.FAIL+"\n"+"You don't have any"+str(item.name)+"left!"+bcolors.ENDC)

Извините, я потратил ваше время, ребята.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

@ Ifsalazar2010 добро пожаловать в python.Вот несколько вещей, которые, как я вижу, вы делаете неправильно.

Во-первых, ваши значения dict должны быть строковыми, в противном случае python попытается найти их как объект.Поэтому напишите "potion" вместо potion

player_items = [{"item":"potion", "quantity": 15},
            {"item":"hipotion", "quantity": 10},
            {"item":"superpotion", "quantity": 8},
            {"item":"elixir", "quantity": 3},
            {"item":"hielixir", "quantity":1},
            {"item":"grenade", "quantity": 12}]

Далее вам нужно использовать правильный объект player_items, а не player.items.Ваш объект - это список словарей, которые вы можете вызвать по индексу, но вы не определили item_choice.Я использую индекс 1 в качестве примера.

item = player_items[1]["item"]
print(item)
player_items[1]["quantity"] -= 1
print(player_items)

Короче говоря, похоже, что вы не предоставили детали в своем примере, чтобы повторить свои ошибки.например что такое bcolors.FAIL

0 голосов
/ 02 октября 2018

item не является строкой "potion", например;это ссылка на экземпляр Item, представляющий зелье.Вам необходимо предоставить соответствующий __str__ метод для вашего Item класса.

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