-1

I want to make an inventory system in my game and it does add items to inventory but when I want it to print out the names of items in inventory it returns this:

This is your inventory: [<'class main.Item'>]

It looks like it is copying the Item class into the inventory list but I don't know how to fix it can somebody please tell me how to print the name of the items instead of the copy of the class?

This is my code:

import sys #Imports the system commands which makes it possible to terminate the program import time #Imports the time module to allow delays in script import os #Imports os to make it possible to play music/sound import random print('Welcome to the Text Adventure login screen') #Login screen welcome message username1 = input ('Please set a username: ') #Setting the username password1 = input ('Please set a password: ') #Setting the password username2 = input ('Please enter your username: ') #Entering the saved username if username2 == username1 : print('Please enter password to prove it\'s ' + username1) #Prints confirmation messages if username2 != username1: #Checks if password's incorrect if so, Terminates the program print ('Username Incorrect!!!') sys.exit() password2 = input ('Please enter your password: ') #Entering the saved password if password2 == password1 : print ('Password Correct!') if password2 != password1 : #Checks if password is incorrect, if so terminates the program print ('Password incorrect you hacker!!!') sys.exit print ('WELCOME ' + username1 + ' TO TEXT ADVENTURE V 1.0') #Prints welcome message to text adventure os.system("start F:\Python\Adventure.mp3") #http://codereview.stackexchange.com/questions/57438/game-inventory-system Website class Item(object): def __init__(self, name, value, quantity = 1): self.name = name self.value = value self.quantity = quantity def itemadd(self): inventory.append(Item) class Weapon(Item): def __init__(self, name, value, damage, quantity = 1): Item.__init__(name, value, quantity) self.damage = damage def weaponadd(self): weapons.append(Weapon) def Wooden_Sword(Weapon): name = "Wooden Sword" value = 10 damage = 25 def Lighter(Item): name = "Lighter" value = 5 def Sharp_Stick(Weapon): name = "Sharp Stick" value = 5 damage = 15 def startRoom(): global inventory global character_Cash global character_Health global character_Damage_No_Weapon global weapons global weapon_Choice global weapon_Add global item_Add character_Health = 1000 inventory = [] character_Cash = 200.00 character_Damage_No_Weapon = random.randint(1, 15) weapons = [] goblin_Damage = random.randint(1, 10) wizard_Damage = random.randint(1, 50) time.sleep(5) print ('You are in a cottage in Loch Scyze in Scotland where there is a large wooden chest in the room') time.sleep(5) print ('Your character\'s HP is %d' % character_Health) time.sleep(5) print ('Your character has $%d' % character_Cash) time.sleep(5) print ('Press [o] to open chest or press [e] to exit cottage') choice1 = input ('What is your choice? ') if choice1 == "e" : print ('You have exited the cottage') time.sleep(5) print ('To go North press [n], East [e] or West [w]') choice2 = input ('What is your choice? ') '''if choice2 == "e" : print (''' if choice2 == "n" : print ('You have entered the woods') time.sleep(5) print ('Press [w] to equip weapon or [e] to fight barefist') choice6 = input() if choice6 == "w" : if weapons == [] : print ('You have no weapons yet!') time.sleep(2.5) else : print ('These are your weapons: ') print (weapons) weapon_Choice = input ('Which weapon do you want to use? Type in weapons[Numberinlist] ') del weapon_Choice goblin_Health = 50 print ('You have discovered a goblin press [a] to attack or [p] to pay $10 to escape ') print ('The goblin\'s health is %d' % goblin_Health) if choice6 == "e" : print ('You have no weapon equipped') choice3 = input ('What is your choice? ') if choice3 == "p" : character_Cash -= 10 print ('You have successfully escaped') print ('You now have $%d' % character_Cash) print ('To go North press [n]') choice4 = input () if choice4 == "n" : print('You have moved North') time.sleep(2.5) print ('You hear a loud noise and start running') os.system("start F:\Python\Forest.mp3") time.sleep(16.5) print ('...') time.sleep(16.5) os.system("start F:\Python\Shotgun.mp3") time.sleep(1) os.system("start F:\Python\Shell_Falling.mp3") print ('You hear someone shoot at you, you keep running') time.sleep(1) os.system("start F:\Python\Forest.mp3") time.sleep(16.5) print ('...') time.sleep(16.5) print ('OH NO!!! You have run over a death trap set up by a hunter') time.sleep(5) os.system("start F:\Python\gameover.wav") print('GAME OVER') time.sleep(5) sys.exit() if choice3 == "a" : while goblin_Health | character_Health >= 0 : if goblin_Health | character_Health <= 0 : print ('The Goblin is dead!') time.sleep(2.5) else: print ('You take a hit at the goblin') goblin_Health -= character_Damage_No_Weapon os.system("start F:\Python\Punch_1.mp3") if goblin_Health | character_Health <= 5 : print ('The Goblin is dead!') time.sleep(2.5) else : print ('The goblin\'s health is %d' % goblin_Health) time.sleep(2) print ('The goblin attacks you!') os.system("start F:\Python\Punch_2.mp3") character_Health -= goblin_Damage print ('Your health is %d' % character_Health) time.sleep(2) if choice1 == "o" : print ('You have opened a chest') time.sleep(2.5) print ('In the chest there is a wooden sword, $27, a lighter and a sharp stick') print ('Type y to take the items or n to leave them') pickup1 = input() if pickup1 == "y": weaponadd(Wooden_Sword) itemadd(Lighter) weaponadd(Sharp_Stick) os.system("start F:\Python\Coin.wav") character_Cash += 27 print ('This is your inventory:') print (inventory) print ('These are your weapons:') print(weapons) print ('This is your cash balance:') print ('$%d' % character_Cash) time.sleep(15) else: print ('You leave the items in the chest') print ('In your inventory there is:') print (inventory) print ('You have $%d' % character_Cash) print ('You are still in the cottage') time.sleep(5) print ('Press [e] to exit cottage') choice5 = input () if choice5 == "e" : print ('You have exited the cottage') 
3
  • 3
    You have a requirement ('an inventory system') and a block of code. What is your question? Are you expecting us to write the inventory system for you? Commented Sep 9, 2015 at 15:57
  • @MichaelT, he said "when I want it to print out the names of items in inventory it returns this". That seems like a pretty clear question for anyone who understands English. Does it have to have a question mark in order to be a question? Commented Sep 9, 2015 at 16:05
  • @Kyralessa if that is the case (and it could very well be - the original version of the question was a bit of a formatting mess), it is a debugging question and one should probably flag it for migration to Stack Overflow instead. Debugging questions are off topic, as described in the help center. Commented Sep 9, 2015 at 16:07

4 Answers 4

1
for item in inventory print item.name 

that's it.

Sign up to request clarification or add additional context in comments.

Comments

0

I don't know Python, but based on my knowledge of other languages, it looks to me like you may be printing the array itself rather than its contents.

To print the contents of the inventory array, you'll need to loop through it.

Here's some information on how to loop through an array in Python:

6.3. Iterating with for Loops

2 Comments

This still prints [<'class main.Item'>]
It looks like it is copying the Item class into the inventory list but I don't know how to fix it
0

There are many issues with your code at the moment.

def Wooden_Sword(Weapon): 

creates a function called Wooden_Sword, within which you can refer to a variable called Weapon. This is entirely unrelated to your Weapon class. I suspect you actually want to have is lines

Wooden_Sword = Weapon(name = "Wooden Sword", value = 10, damage = 25) 

and so forth

Similarly your functions weaponadd and itemadd ignore self, and the class Weapon and the class Item to the list. This is why you see <'class main.Item'> when you try to print the inventory. Instead you can try

def weaponadd(weapontoadd): weapons.append(weapontoadd) 

Combined with the changes to your item declarations, you will have named items in your lists

As a further note it looks like pasting into SO has messed up your indentation, which will change the meaning of a python program

Comments

0

In addition to the problems noted by @Caleth, you need to be explicit about how the programme should output the weapon information. A simple way to do this is to change print(weapons) to something like this:

for weapon in weapons: print("Name: {name}; value: {value}; damage: {damage}".format(name=weapon.name, value=weapon.value, damage=weapon.damage)) 

An alternative way is to implement the __repr__ method of the Weapon class:

class Weapon(Item): def __init__(self, name, value, damage, quantity = 1): Item.__init__(name, value, quantity) self.damage = damage def __repr__(self): return "Name: {name}; value: {value}; damage: {damage}".format(name=self.name, value=self.value, damage=self.damage) 

Then later you can simply print(weapons) to print the list in the format specified.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.