2013-10-16 32 views
7

Bir RPG oyununda kullanmak için bir envanter programı yapmaya çalışıyorum. Programın bir şeyler ekleyip kaldırabilmesi ve bunları bir listeye ekleyebilmesi gerekiyor.TypeError: yalnızca listeyi ("str" ​​değil) listeye ekleyebilir

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) 

Bunu çalıştırmak ve bu hatayı alıyorum kadar bazı şey almaya çalışın:

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 

herhangi biri bunun için bir düzeltme var mı, büyük ölçüde olurdu Bu defa ne var

newinv = inventory.append(add) 
:

cevap

8

ben sana bu çizgiyi newinv=inventory+str(add) değiştirmesini sağlamak, böylece listeye yeni bir öğe eklemek olduğunu ne yapmak istediğini düşünmek takdir

Şu anda ne yapıyorsunuz, bir listeyi Python'da geçersiz bir işlem olan bir dizeyle birleştirmeye çalışıyor.

Ancak ne istediğini bu durumda, bir listeden öğe eklemek ve silmek için olduğunu düşünüyorum senin/else blok olmalıdır eğer:

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) 

Her yeni envanter listesi oluşturmak gerekmez yeni bir öğe eklediğiniz zaman.

0

Bu, bir dizeye nasıl öğe eklenmeyecek? Bu: Bir liste ve bir dizeyi birleştirmeye çalıştığınız anlamına gelir. Bir listeye öğe eklemek için list.append() yöntemini kullanın.

newinv = inventory.append(add) #newinv is the old inventory, with a new item. 

Ya da, sadece newinv listesini atmak işler biraz daha kolay olsun.

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

Bu yardımcı olur umarız!

İlgili konular