2016-09-13 96 views
0

我正在爲我正在設計的遊戲「拾取所有」和「全部丟棄」。玩家擁有一個庫存(庫存),每個房間都有自己的存儲空間來跟蹤其內容。當它是一個特定的項目時,我可以輕鬆地追加或從相應的列表中刪除該項目,但是當它適用於所有項目時,我不知道如何繼續。 (注:我不知道有多少項目是在庫存爲隨着玩家需要和掉落物品會改變)For Loop追加到另一個列表

ROOMNAMEinventory = ['lamp', 'coin'] 
inventory = ['string'] 
do = raw_input("What would you like to do?").upper() 
if(do == 'drop all'): 
    for items in ROOMNAMEinventory: 
    inventory.append(items) 
    ROOMNAMEinventory.remove(items) 
print inventory 
print ROOMNAMEinventory 

目前,這款打印出:

['string', 'lamp'] 
['coin'] 
None 

爲什麼它打印無?

+0

必須有這一個億的重複:不要」修改你迭代的列表。 – polku

+1

您的代碼無法生成觀察到的輸出。沒有第三個'print'語句來生成'None','do'永遠不會等於''drop all'',因爲它不會包含任何小寫字母,也就是'str.upper()'的返回值。 – chepner

+0

對於這個特定的例子,你可以使用list的'extend'和'clear'方法來做同樣的事情。 – Copperfield

回答

0

2失誤這裏

  1. 你轉換爲大寫,但對降低測試!
  2. 你應該反覆的ROOMNAMEinventory複製,修改列表,而不是推薦迭代它:它改變列表到['string', 'lamp'] and ['coin']:不是說你想

固定碼:

ROOMNAMEinventory = ['lamp', 'coin'] 
inventory = ['string'] 
do = raw_input("What would you like to do?").upper() 
if(do == 'DROP ALL'): # upper vs upper: could work :) 
    for items in ROOMNAMEinventory[::]: # iterate on a copy of the list 
    inventory.append(items) 
    ROOMNAMEinventory.remove(items) 
print inventory 
print ROOMNAMEinventory 

結果(輸入drop all時)

['string', 'lamp', 'coin'] 
[] 
+0

謝謝!這確實有用。你可以在添加/刪除之前檢查循環中的某些東西嗎?就像它必須低於一定的重量一樣,你可以讓它檢查每件物品嗎? – Adam

+0

定義一個字典:'wd = {'lamp':100,'coin':1}'並檢查是否wd [items] <10:做些什麼' –

+0

我在想更多有一個名爲AVALWEIGHT的變量。每次拿起物品時,都會從AVALWEIGHT中減去物品的重量。對於單個拾取/丟棄物品,添加或減去保存的物品重量(對於全部丟棄,重置爲原始)很簡單,但對於拾取它而言,所有這一切都不太合適。例如:'AVALWEIGHT = 10'和'COINWEIGHT = 15'有沒有辦法讓硬幣不會改變庫存,但其他物品(如果它們的重量更小)會? – Adam

1

在Python List支持添加ö NE另一:

roomname_inventory = ['lamp', 'coin'] 
inventory = ['string'] 
do = raw_input("What would you like to do?").upper() 
if (do == 'DROP ALL'): 
    inventory += roomname_inventory 
    roomname_inventory = [] 
print inventory 
print roomname_inventory 

但如果你只是想擺脫修改列表在遍歷它的,你也可以這樣做:

if (do == 'DROP ALL'): 
    while roomname_inventory: 
     inventory.append(roomname_inventory.pop(0)) 
相關問題