列表和pop()没有像我期望的那样工作

时间:2016-08-04 05:08:38

标签: python list pop

我的节目是一款带有药水和胸膛的冒险游戏。我已将它们设置在列表中,因此当用户喝药水或打开胸部时,我可以使用pop()将其从列表中删除。当用户在同一个房间时,这种方法很好,但如果他们回到房间,他们就可以再次使用那种药水或胸部。

在伪代码中,系统应该像这样工作:

if potions:
    if there are still potions in the list:
        drink potion
        potions.pop()
    else:
        print "There are no potions left."
else:
    print "There are no potions to drink."

我认为发生的事情是当我从列表中弹出药水时,if potions不会计算为真,它会自动转到else块,但我不确定为什么会这样做我也不确定为什么当我回到房间时,列表会自行重置。

我很可能没有完全理解列表或pop方法是如何工作的,所以如果有人能够澄清这将是伟大的。 谢谢!

从OP链接编辑实际代码

if room.potions:
    if len(room.potions) > 0:  # if there are potions left
        if hasattr(room.potions[0], 'explode'): # if the potion is a bomb
            room.potions[0].explode(You) # explode using zeroeth item from the list
            room.potions[0].pop # remove zeroeth item from the list`
        else:
            room.potions[0].heal(You)  # heal using zeroeth potion from the list
            room.potions.pop(0)  # remove zeroeth item from the list
    else:
        print "There are no more potions to drink"
else:
    print "There are no potions to drink"

编辑:已解决

我的问题是,当我将参数放入词典时,我将整个房间作为其中一个,我想我可以使用其中的所有内容。但是每次我这样做都会使用 init 设置房间,从而有效地破坏了我想要做的事情。我为魔药和胸部添加了单独的参数,现在它完美地运作了。 感谢@Bernie提供了有用的建议,让我看到错误。 还要感谢@Everybody的建议和提示。

4 个答案:

答案 0 :(得分:1)

你能做的就是当他们喝酒时这样做

potions = 1
    if potions > 0:
        drink potion
        potions = potions - 1
    else:
        print "There are no potions left."

答案 1 :(得分:0)

您可以按如下方式编写代码:

if potions: # same as len(potions) > 0
    # drink potion
    potions.pop()
else:
    print "There are no potions to drink."

因此,检查是否剩下任何药水,如果它仍然饮用,并从列表中删除,否则显示没有药水。

答案 2 :(得分:0)

EAFP方法:

updated_at
  

比获得许可更容易请求宽恕。这个常见的Python   编码风格假定存在有效的键或属性   如果假设被证明是假的,则捕获异常。这干净又快   风格的特点是存在许多尝试和除外   声明。该技术与许多人共同的LBYL风格形成鲜明对比   其他语言,如C.

答案 3 :(得分:0)

行。我受到诱惑...... :)当然,应该存在一个魔药层次结构,而$('div.test').unblock(); 方法可能是对“世界”的信息。等等......

print()

<强>输出:

  

这个房间有5个药水,彼得有100马力和0个药水   ___________
彼得拿一个简单的药水
这个房间有4个药水,彼得有100马力和1个药水   ___________
彼得采取爆炸药水彼得受到3马力的伤害!!
这个房间有3个药水左彼得有97马力和1   药水。
  ___________
彼得拿爆炸药水彼得受到3马力的伤害!!
这个房间有2个药水,彼得有94马力和1个   药水。
  ___________
彼得采取爆炸药水彼得受到5马力的伤害!!
这个房间有1个药水左彼得有89马力和1   药水。
  ___________
彼得采取爆炸药水彼得受到1马力的伤害!!
这个房间有0个药水左彼得有88马力和1   药剂。