TypeError: kan alleen aaneenvattende lijst (niet “str”) om

Ik probeer een inventarisprogramma te maken om in een RPG te gebruiken. Het programma moet dingen kunnen toevoegen en verwijderen en vervolgens toe te voegen aan een lijst. Dit is wat ik tot nu toe heb:

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)

Wanneer ik dit uitvoer en probeer iets op te halen, krijg ik deze foutmelding:

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

Heeft iemand hiervoor een oplossing, het zou zeer op prijs worden gesteld.


Antwoord 1, Autoriteit 100%

Ik denk dat wat je wilt doen, is een nieuw item aan je lijst toevoegen, dus je hebt de regel wijzigen newinv=inventory+str(add)met deze:

newinv = inventory.append(add)

Wat u nu doet, probeert een lijst met een tekenreeks te combineren die een ongeldige bediening in Python is.

Ik denk echter wel wat u wilt, is om items uit een lijst toe te voegen en te verwijderen, in dat geval moet uw IF / ELSBOCK:

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)

U hoeft geen nieuwe inventarislijst op te bouwen telkens wanneer u een nieuw item toevoegt.


Antwoord 2, Autoriteit 9%

Dat is niet hoe u een item aan een tekenreeks kunt toevoegen. Dit:

newinv=inventory+str(add)

betekent dat u een lijst en een tekenreeks probeert te concateren. Om een ​​item aan een lijst toe te voegen, gebruikt u de list.append()-methode.

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

Ik hoop dat dit helpt!


Antwoord 3, Autoriteit 4%

Ik heb hiervoor een oplossing. Het eerste ding dat toevoegen heeft al een string-waarde als invoerfunctie () functie standaard neemt de invoer als tekenreeks. Tweede ding dat u toepassingsmethode kunt gebruiken om de waarde van variabele in uw lijst toe te voegen.

Controleer mijn code die ik heb gedaan met een wijziging: –
{1} U kunt opdracht invoeren in kapitaal of klein of mix
{2} Als de gebruiker verkeerde opdracht heeft ingevoerd, vraagt ​​uw programma opnieuw naar de opdracht

Inventory = [“Sword”, “Potion”, “Armor”, “Bow”]
Print (inventaris)
Print (“\ NCommands: gebruik (item verwijderen) en pick-up (item toevoegen)”)
selectie = invoer (“Kies een opdracht [gebruik / pick-up]:”)
Terwijl TRUE:
Als selectie.lower () == “Gebruik”:
Print (inventaris)
Verwijderen_item = Input (“Wat wil je gebruiken?”)
inventaris.Remove (verwijderen_item)
Print (inventaris)
pauze

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] : ")

Antwoord 4

U kunt gebruiken:

newinv=inventory+[add]

maar het is beter om append te gebruiken omdat er geen nieuwe lijst wordt gemaakt:

inventory.append(add)

Antwoord 5

Laat me je code aanpassen

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)

De fout is dat je string en lijst toevoegt, je moet listof []gebruiken om de string het type listte maken

Other episodes