简体   繁体   中英

I want to make an inventory system for my game in Python V 3.4.3

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:

6.3. Iterating with for Loops

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM