Python 3 — Как сделать отсортированный список для инвентаря ролевой игрыPython

Программы на Python
Ответить
Anonymous
 Python 3 — Как сделать отсортированный список для инвентаря ролевой игры

Сообщение Anonymous »

Я создаю ролевую игру в стиле Dragon Quest на Python (пока только текст) и близок к завершению системы инвентаря, но не могу сделать ее такой, как мне хочется. >
Предположим, ваш инвентарь представлен списком:
inventory = [medicinal_herb, medicinal_herb, copper_sword, medicinal_herb, medicinal_herb, medicinal_herb]

Я хочу, чтобы оно отображало уникальное имя предмета с количеством предметов на вкладках, например:
Инвентарь:
Лекарственные травы 5
Медный меч 1
Лучшее, что я придумал на данный момент, — это отображать каждый элемент в инвентаре в аккуратном формате:
inv_count = 0 # Seeding the inventory items per line.
for i in inventory:
inv_count += 1
if inv_count % 6 == 0: # This prints 5 inventory items per line.
print()
print(i.name, end=' ') # The end=' ' command keeps the prints on the same line.

Мне также удалось получить правильное количество предметов из инвентаря с помощью этого кода:
from collections import Counter # This is used to count specific items in inventory.
inventory_count = Counter(inventory)
for i in inventory:
print(f"{i} \t {inventory_count}")
print()

Так что да, я думаю, что я довольно близок к своей цели, но упускаю одну мелочь. Идеи приветствуются!
Вот полный рабочий код, который у меня есть для удобства тестирования:
from collections import Counter # This is used to count specific items in inventory.
from collections import namedtuple # I use named tuples for Weapons and Armor.

Weapon = namedtuple('Weapon', ['name','strength','cost']) # Create a named tuple for Weapons
copper_sword = Weapon('Copper Sword',10,180)
Item = namedtuple('Items', ['name', 'cost']) # Create a named tuple for Items
medicinal_herb = Item('Medicinal Herb', 15)

inventory = [medicinal_herb, medicinal_herb, copper_sword, medicinal_herb, medicinal_herb, medicinal_herb]

print("Inventory:")
inv_count = 0 # Seeding the inventory items per line.
for i in inventory:
inv_count += 1
if inv_count % 6 == 0: # This prints 5 inventory items per line.
print()
print(i.name, end=' ') # The end=' ' command keeps the prints on the same line.

inventory_count = Counter(inventory)
for i in inventory:
print(f"{i.name} \t {inventory_count}")
print()


Подробнее здесь: https://stackoverflow.com/questions/793 ... -inventory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»