2010-03-23 6 views
4

J'essaie de créer un joueur qui peut ajouter et supprimer des éléments de son inventaire. J'ai tout fonctionné, j'ai juste un petit problème. Chaque fois qu'il imprime l'inventaire, "Aucun" apparaît également. J'ai joué avec pour essayer de supprimer cela, mais peu importe ce que je fais, 'None' apparaît toujours dans le programme! Je sais que je manque juste quelque chose de simple, mais je ne peux pas le comprendre pour la vie de moi.ajouter/supprimer des éléments dans une liste

class Player(object): 

    def __init__(self, name, max_items, items): 
    self.name=name 
    self.max_items=max_items 
    self.items=items 

    def inventory(self): 
    for item in self.items: 
     print item 

    def take(self, new_item): 
    if len(self.items)<self.max_items: 
     self.items.append(new_item) 
    else: 
     print "You can't carry any more items!" 

    def drop(self, old_item): 
    if old_item in self.items: 
     self.items.remove(old_item) 
    else: 
     print "You don't have that item." 


def main(): 
    player=Player("Jimmy", 5, ['sword', 'shield', 'ax']) 
    print "Max items:", player.max_items 
    print "Inventory:", player.inventory() 

    choice=None 
    while choice!="0": 
    print \ 
    """ 
    Inventory Man 

    0 - Quit 
    1 - Add an item to inventory 
    2 - Remove an item from inventory 
    """ 

    choice=raw_input("Choice: ") 
    print 

    if choice=="0": 
     print "Good-bye." 

    elif choice=="1": 
     new_item=raw_input("What item would you like to add to your inventory?") 
     player.take(new_item) 
     print "Inventory:", player.inventory() 

    elif choice=="2": 
     old_item=raw_input("What item would you like to remove from your inventory?") 
     player.drop(old_item) 
     print "Inventory:", player.inventory() 


    else: 
     print "\nSorry, but", choice, "isn't a valid choice." 

main() 

raw_input("Press enter to exit.") 
+1

Pouvez-vous envoyer un échantillon de votre entrée et de sortie? –

Répondre

4

Le problème est cette déclaration:

print "Inventory:", player.inventory() 

Vous dire Python d'imprimer la valeur retournée par player.inventory(). Mais votre méthode inventory() imprime simplement l'inventaire, elle ne renvoie rien - donc la valeur de retour est implicitement None.

Vous voulez probablement choisir explicitement soit ceci:

print "Inventory:" 
player.print_inventory() 

Ou bien vous pourriez avoir retourner une chaîne et faire ceci:

print "Inventory:", player.inventory_as_str() 
+0

Merci! Je savais que c'était quelque chose de simple. Tout ce que je devais faire était de supprimer cette virgule, haha. – Jam

0

Pourriez-vous remplacer la fonction:

def inventory(self): 
    for item in self.items: 
     print item 

avec ceci:

def inventory(self): 
    print self.items 

puis appelez:

print "Inventory" 
player.inventory() 

Ou vous pourriez avoir la fonction:

def print_inventory(self): 
    print "Inventory:" 
    for item in self.items: 
     print item 
Questions connexes