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')
for item in inventory
print item.name
that's it.
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:
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
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.