1

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

  • Use `print(str(x.item_name),end=',')` https://stackoverflow.com/questions/493386/how-to-print-without-a-newline-or-space – Abel Jul 23 '22 at 02:13
  • yea i want it to loop back after every 4 items Im going to edit that now – HardlySalty Jul 23 '22 at 02:14
  • 1
    Do not run `commands()` to go back to the top of `commands()`. That is recursion, is unnecessary, and has a side effect of growing the call stack. Use a while loop if you want to repeat. – Mark Tolonen Jul 23 '22 at 02:23

1 Answers1

1

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
j1-lee
  • 13,764
  • 3
  • 14
  • 26