如何在中间重新开始循环[开始重复]
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语句并询问他们是否要再次播放。
另一答案
您的代码有两个问题。
- 除了
if
语句内部(因为playAgain
始终为y
而不会触发)之外,您从未收集用户的输入 - 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()
以上是关于如何在中间重新开始循环[开始重复]的主要内容,如果未能解决你的问题,请参考以下文章