【问题标题】:Why is my while loop continuing even after the condition is met [closed]为什么即使在满足条件后我的while循环仍在继续[关闭]
【发布时间】:2023-03-31 22:08:01
【问题描述】:

我正在尝试创建一个简单的游戏,您可以在其中进行攻击或防御。我创建了两个攻击函数(玩家和敌人)和一个 while 循环,条件是当任一生命值最终为 0 时结束,但是当我运行程序时,即使其中一个生命值小于 0,while 循环也会重复。

while playerHealth > 0 or enemyHealth > 0:
    choice = input("Attack(a) or defend(d)?")
    if choice == "a":
        playerAttack()
    elif choice == "d":
        print("Defend")
    else:
        print("ERROR")
    time.sleep(3)
    enemyAttack()

if playerHealth <= 0:
    print("Game over")

if enemyHealth <= 0:
    print("You win!")

我希望 while 循环会重复,直到敌人或玩家的生命值达到 0,然后根据谁的生命值首先耗尽显示游戏结束或你获胜。 实际结果是游戏稍微过了应该结束的时间,并且生命值远低于 0。

【问题讨论】:

  • 代码中没有while循环
  • 循环在哪里?
  • 请添加您的问题的最小工作示例和预期输出。
  • 您的playerHealthenemyHealth 都不会在循环内更改。因此,如果您进入while 循环,它将永远不会停止。 (我假设您没有在任何函数中声明这些变量 global。)

标签: python loops while-loop


【解决方案1】:

你想要:

while playerHealth > 0 and enemyHealth > 0:

而不是or

按照你现在的条件,游戏不会停止,直到两个生命值都为 0 或更少。因此,如果您的敌人已经被击败,但您的玩家的生命值超过 0,则游戏将继续运行。

【讨论】:

  • @ewhiting Or 表示如果满足任一条件,循环将继续。
  • @lc74 啊..我疯了
  • 我这样做了,现在当玩家的生命值耗尽时游戏停止,但是如果敌人首先耗尽生命值,它会再次攻击,游戏以游戏结束,你赢了因为两个生命值都低于 0
  • @windstorm2002 那是因为你总是发动敌人攻击。你应该只做其中之一。或者,您可以添加break
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 2023-04-02
  • 2012-09-16
  • 1970-01-01
  • 2021-03-11
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多