当变量等于零时,While循环不结束

2024-09-28 03:18:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个玩家对敌人造成伤害以结束战斗的游戏(就像大多数游戏一样)。 然而,我遇到了一个问题

while battle != 0:
    playerturn()
    time.sleep(1)
    allyturn()
    time.sleep(1)
    enemyturn()
    time.sleep(1)

print("Battle complete.")

而上面的while循环没有结束,因此“战斗完成”永远不会出现

在{}和{}中,敌人的生命值降低。如果敌人的生命值在enemyturn()内等于或低于0,battle = 0。 这是在enemyturn()

if eHP <= 0:
    #eHP stands for enemy HP
    print("Bandit Robber is defeated.")
    battle = 0

我以前确保输入时间,这不是问题所在。 任何帮助都将不胜感激

下面是一个基本相同的示例代码:

import random

def testpart():
    battle = 0

def test():
    battle = 1
    while battle != 0:
        print("This is testing.")
        testpart()

test()

Tags: test游戏timeisdef玩家sleepprint
3条回答

testpart()应该返回战斗值

def testpart():
    battle = 0
    return battle


def test():
    battle =1
    while battle :
        print("This is testing.",battle)
        battle = testpart()
        print(battle)
        


test()

假设变量battle在定义函数之前就存在,您可以通过一个简单的global声明来解决这个问题

def enemyturn():
    global battle
    ...

(您需要在使用变量的每个函数的顶部执行此操作)

然而,由于许多原因,这通常被认为是糟糕的编码实践。解决此类问题的正确方法是从函数中返回一个布尔值,指示战斗是否应该继续,并按程序构建代码,而不是依赖于全局可变状态。问题的症结太大了,无法用一个StackOverflow答案来回答,但假设您遵循的是一个相当不错的Python教程,那么最终您将了解到这类问题。慢慢来,一步一步来

尝试将battle变量传递给enemyturn()函数。然后返回battle。这会让它按照你想要的方式工作。当前,battle变量在错误的范围内被更改为0,因此它没有在主循环中检测到它

相关问题 更多 >

    热门问题