2

我正在尝试循环战斗菜单。虽然它还没有完成,但我在循环它时遇到了问题。我希望菜单一直循环到 myhp 或 hp 低于 0。所以我使用了“while myhp > 0 or hp > 0:”

它不起作用,我做错了什么?

def fightmode(name, hp, dmg, gold):
print '\n\n\nYou are in a fight with %s' %name
print '%s has %sHP' %(name, hp)
while myhp > 0 or hp > 0:
    hp = hp - mydmg
    print '\n\t1. Attack \n\t2. Guard \n\t3. Run away.'
    opt1= ''
    allowed = ["1", "2", "3"]
    while opt1 not in allowed:
        opt1 = raw_input("\nWhat will you do? ")
        if opt1 == "1":
            print "You have inflicted %d damage on %s. %s's HP is %s" %(mydmg, name, name, hp)
if myhp > 0 :
    print"myhp"
if hp > 0 :
    print"theirhp"
4

3 回答 3

2

没关系,我想我明白了。我将“或”更改为“和”,似乎它正在工作。这是正确的方法吗?

于 2012-09-26T05:06:48.433 回答
0

现在,您需要myhpORhp为真,while 循环才能继续进行。因此,如果其中一个下降到 0 并因此“变为 False”,则另一个仍然为 true 并保持循环继续进行。

那么你怎么能做些什么呢?(你已经猜对了……and改用!)

所以while myhp > 0 or hp > 0:应该是while myhp > 0 and hp > 0:(请注意,or交换为and!)

于 2012-09-26T06:16:47.213 回答
-1

因为while循环循环直到布尔表达式为真并在表达式为后停止

所以你需要写while myhp < 0 or hp < 0:

于 2012-09-26T05:44:06.623 回答