31

我正在尝试制作一个用于 RPG 的库存程序。该程序需要能够添加和删除事物,然后将它们添加到列表中。这是我到目前为止所拥有的:

inventory=["sword","potion","armour","bow"]
print(inventory)
print("\ncommands: use (remove) and pickup (add)")
selection=input("choose a command [use/pickup]")

if selection=="use":
    print(inventory)
    remove=input("What do you want to use? ")
    inventory.remove(remove)
    print(inventory)

elif selection=="pickup":
    print(inventory)
    add=input("What do you want to pickup? ")
    newinv=inventory+str(add)
    print(newinv)

当我运行它并尝试拿起一些东西时,我收到了这个错误:

Traceback (most recent call last):
  File "H:/Year 10/Computing/A453/Python Programs/inventory.py", line 15, in <module>
    newinv=inventory+str(add)
TypeError: can only concatenate list (not "str") to list

有没有人解决这个问题,将不胜感激。

4

5 回答 5

24

我认为你想要做的是在你的列表中添加一个新项目,所以你已经改变了这一行newinv=inventory+str(add)

newinv = inventory.append(add)

您现在正在做的是尝试将列表与字符串连接起来,这在 Python 中是无效操作。

但是我认为您想要的是从列表中添加和删除项目,在这种情况下,您的 if/else 块应该是:

if selection=="use":
    print(inventory)
    remove=input("What do you want to use? ")
    inventory.remove(remove)
    print(inventory)

elif selection=="pickup":
    print(inventory)
    add=input("What do you want to pickup? ")
    inventory.append(add)
    print(inventory)

每次添加新项目时,您都不需要建立新的库存清单。

于 2013-10-16T08:56:28.213 回答
2

这不是如何将项目添加到字符串。这个:

newinv=inventory+str(add)

意味着您正在尝试连接列表和字符串。要将项目添加到列表中,请使用list.append()方法。

inventory.append(add) #adds a new item to inventory
print(inventory) #prints the new inventory

希望这可以帮助!

于 2013-10-16T08:58:33.967 回答
1

我有一个解决方案。add 的第一件事是已经有一个字符串值作为 input() 函数,默认情况下将输入作为字符串。第二件事,您可以使用 append 方法在列表中附加 add 变量的值。

请检查我的代码我已经做了一些修改:- {1}您可以输入大写或小写的命令或混合{2}如果用户输入了错误的命令,那么您的程序将要求再次输入命令

inventory = ["sword","potion","armour","bow"] print(inventory) print("\ncommands : use (remove item) and pick up (add item)") selection=input("选择一个命令[use/pickup] : ") while True: if selection.lower()=="use": print(inventory) remove_item=input("你想用什么?") inventory.remove(remove_item) print(inventory ) 休息

 elif selection.lower()=="pickup":
      print(inventory)
      add_item=input("What do you want to pickup? ")
      inventory.append(add_item)
      print(inventory)
      break
 
 else:
      print("Invalid Command. Please check your input")
      selection=input("Once again choose a command [use/pickup] : ")
于 2020-11-01T16:29:54.660 回答
1

您可以使用:

newinv=inventory+[add]

但使用 append 更好,因为它不会创建新列表:

inventory.append(add)
于 2019-10-30T11:15:29.903 回答
0

让我修复你的代码

inventory=["sword", "potion", "armour", "bow"]
print(inventory)
print("\ncommands: use (remove) and pickup (add)")
selection=input("choose a command [use/pickup]")

if selection == "use":
    print(inventory)
    inventory.remove(input("What do you want to use? "))
    print(inventory)
elif selection == "pickup":
    print(inventory)
    add=input("What do you want to pickup? ")
    newinv=inventory+[str(add)] #use '[str(add)]' or list(str(add))
    print(newinv)

错误是您正在添加字符串和列表,您应该使用listor[]使字符串成为list类型

于 2019-10-30T11:19:06.747 回答