如何在中间重新开始循环[开始重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在中间重新开始循环[开始重复]相关的知识,希望对你有一定的参考价值。

我正在尝试使用def工具制作基于文本的游戏,以使其易于循环。但是,当玩家死亡时,我无法拥有它,询问玩家是否希望再次玩游戏,然后循环重新开始。我已经更改了代码,以使玩家死亡时playAgain =“ n”,因此循环结束,但仍然无效。是因为它是一个全局变量,而我正试图用一个局部变量来影响它?如果是这样,我该如何解决?

playAgain = "y"
while playAgain == "y" or playAgain == "yes" :
    displayIntro()
    choosePath()
    checkPath()
    NextSteps()
    Reaction()
    attackCHOICE()

    if playAgain != "y" or playAgain != "yes":
        time.sleep(1)
        print()
        delayprint("Do you want to play again? ")
        playAgain = input()

答案

当我们在函数内部创建变量时,它是该函数的局部变量。考虑下面的代码。

playAgain = "y"  # Define a variable outside the function

def setPlayAgainToNo():
    playAgain = "no"


print(playAgain)  # value is "y"
setPlayAgainToNo()  # This modifies a local variable and not the global one
print(playAgain)  # value is still "y"

注意,如果我们在下面定义函数

def printPlayAgain():
    print(f"The value of playAgain is {playAgain}")

然后,它将打印在外部定义的变量的值,因为我们没有创建本地的“ playAgain”变量。

确定,然后如何在函数内部修改全局值?

只需在函数内部使用global variableName告诉python不要创建局部变量,而从外部使用该变量。

def setPlayAgainToNo():
    global playAgain
    playAgain = "no"  # this will modify the global value
另一答案
playAgain = "y"
while playAgain == "y" or playAgain == "yes" :
    displayIntro()
    choosePath()
    checkPath()
    NextSteps()
    Reaction()
    attackCHOICE()

    delayprint("Do you want to play again? ")
    playAgain = input()

    if playAgain != "y" or playAgain != "yes":
        time.sleep(1)
        print()

简单地将您的游戏再次移至if语句之外。

您的当前循环永远运行,因为最初,playAgain始终为“ y”,因此它将永远不会到达您的if语句并询问他们是否要再次播放。

另一答案

您的代码有两个问题。

  1. 除了if语句内部(因为playAgain始终为y而不会触发)之外,您从未收集用户的输入
  2. playAgain不会因为用户在任何其他函数中的选择而改变(例如,在displayIntro()displayIntro()内部),因为在Python中,参数为passed by assignment,换句话说,在函数内部更改变量不会在外部范围内进行更改。

可以在here中找到解释python中分配的绝佳答案

要解决这两个问题,您需要将函数返回值分配给外部范围变量playAgain或从if块中查找用户的输入。

我在下面修改了您的代码以突出第二种方法。

playAgain = "y"
while playAgain == "y" or playAgain == "yes" :
    displayIntro()
    choosePath()
    checkPath()
    NextSteps()
    Reaction()
    attackCHOICE()
    playAgain = input()


    if playAgain != "y" or playAgain != "yes":
        time.sleep(1)
        print()
        delayprint("Do you want to play again? ")
        playAgain = input()

以上是关于如何在中间重新开始循环[开始重复]的主要内容,如果未能解决你的问题,请参考以下文章

打印到文本文件[重复]

如何重新附加片段(片段未附加到活动 Kotlin)

返回到循环中间循环的开始?

WORD中重新开始页码如何设置

循环结束后从头开始重新开始迭代循环 - JS

如何将数据从顶点着色器传递到片段着色器,中间有着色器[重复]