Есть несколько вопросов.
(1) inventory
переназначается при каждом вызове на show()
. Следует просто напечатать содержимое переданного в него аргумента inventory
.
(2) Оператор if в grab_item()
пытается сравнить объект списка с типом int. Вместо этого должно быть if len(inventory) < 4
для сравнения с длиной списка.
(3) В edit_item()
вход, присвоенный num
, должен быть приведен к int, чтобы его можно было использовать для индексации inventory
. Затем вы можете значительно упростить код и поймать неправильные числа с помощью try / кроме.
(4) В drop_item()
, такой же случай, как (3), но для переменной D_item
.
Вот отредактированный код:
def displayTitle():
print("The Wizard Inventory Program")
def displayMenu():
print("show - Show all items")
print("grab - Grab an item")
print("edit - Edit an item")
print("drop - Drop an item")
print("exit - Exit Program")
def show(inventory):
for item in inventory:
print(item)
def grab_item(inventory):
item = input("Name: ")
if len(inventory) < 4:
print(item + " was added.")
inventory.append(item)
else:
print("Error. Too many")
def edit_item(inventory):
num = int(input("Number: "))
try:
print(inventory[num - 1])
Unum = input("Updated name:")
print("Item number " + str(num) + " was updated")
inventory[num - 1] = Unum
except IndexError:
print("Invalid Number")
def drop_item(inventory):
D_item = int(input("Number: "))
try:
print(inventory[D_item - 1] + ' was dropped')
del inventory[D_item - 1]
except IndexError:
print("Error!")
def main():
inventory = ["Wooden Staff", "Wizard Hat", "Cloth Shoes"]
displayTitle()
displayMenu()
while True:
Com = input("Command: ")
if Com == "show":
show(inventory)
elif Com == "grab":
grab_item(inventory)
elif Com == "edit":
edit_item(inventory)
elif Com == "drop":
drop_item(inventory)
elif Com == "exit":
break
else:
print("Please input a valid Response")
if __name__ == "__main__":
main()