Reputation: 25
I'm pretty new to python and I'm trying to make an inventory for a text RPG game I'm making if you could help me figure this out id super appreciate it!
class PlayerAttributes:
inventory = []
def __init__(self, name, inventory):
self.name = name
self.inventory = inventory # LIST
class Item:
def __init__(self, item_name, damage):
self.item_name = item_name
self.damage = damage
class Weapons(Item):
weapon_1 = Item("Me Sword", 100)
Player_1 = PlayerAttributes("Bob", [])
def get_name():
Player_1.name = input("Enter name here: ").capitalize()
commands()
def stats():
print("Name = " + str(Player_1.name), "\n",
"Inventory: ")
for x in Player_1.inventory:
print(str(x.item_name))
def commands():
prompt = None
prompt_choices = {"stats", "quit", "give"}
while prompt not in prompt_choices:
prompt = input("Enter Command: ").lower()
if prompt == "stats":
stats()
commands()
elif prompt == "quit":
quit()
elif prompt == "give":
Player_1.inventory.append(Weapons.weapon_1)
commands()
get_name()
Current output if I enter Test as name then, giveX3, stats
Enter name here: Test
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: stats
Name = Test
Inventory:
Me Sword
Me Sword
Me Sword
Desired output if I enter Test as name then, giveX8, stats Also would like to do a new line after every 4 Items have been shown
Enter name here: Test
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: stats
Name = Test
Inventory: Me Sword, Me Sword, Me Sword, Me Sword #loop after 4 items
Me Sword, Me Sword, Me Sword, Me Sword
If you have any suggestions I'd really appreciate the help! P.S it does not have to be a for loop but I do not want to have to print every weapon index in order to get them in that output
Upvotes: 1
Views: 68
Reputation: 13939
You can use slicing and join
:
def stats():
items = [item.item_name for item in Player_1.inventory]
print(f"Name = {Player_1.name}")
if not items: # if empty list
print("Inventory is empty.")
return
for i in range(0, len(items), 4):
if i == 0:
print("Inventory: ", end='')
else:
print(" ", end='') # for non-first lines
print(', '.join(items[i:i+4]))
Output:
Enter name here: foo
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: give
Enter Command: stats
Name = Foo
Inventory: Me Sword, Me Sword, Me Sword, Me Sword
Me Sword
Upvotes: 1