-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')
asked Sep 9, 2015 at 15:55
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.

Sergio Tulentsev
231k43 gold badges381 silver badges373 bronze badges
answered Jul 11, 2018 at 20:52
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

answered Sep 9, 2015 at 16:04

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

answered Sep 9, 2015 at 22:03

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.

answered Sep 9, 2015 at 22:24

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.