Reputation: 223
I'm trying to create a player who can add and remove items from their inventory. I have everything working, I just have 1 small problem. Every time it prints the inventory, 'None' also appears. I've been messing with it to try and remove that, but no matter what I do, 'None' always appears in the program! I know I'm just missing something simple, but I can't figure it out for the life of me.
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.")
Upvotes: 4
Views: 11314
Reputation: 35990
Would you mind replacing the function:
def inventory(self):
for item in self.items:
print item
with this:
def inventory(self):
print self.items
and then call:
print "Inventory"
player.inventory()
Or you could have the function:
def print_inventory(self):
print "Inventory:"
for item in self.items:
print item
Upvotes: 0
Reputation: 13256
The problem is this statement:
print "Inventory:", player.inventory()
You're telling Python to print the value returned from player.inventory(). But your inventory() method just prints the inventory, it doesn't return anything - so the return value is implicitly None.
You probably want to explicitly choose either this:
print "Inventory:"
player.print_inventory()
Or alternatively you could have it return a string and do this:
print "Inventory:", player.inventory_as_str()
Upvotes: 4