我的节目是一款带有药水和胸膛的冒险游戏。我已将它们设置在列表中,因此当用户喝药水或打开胸部时,我可以使用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的建议和提示。
答案 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 药剂。