2016-09-13 42 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)) 
相关问题