这是我第一篇关于编程的文章! 伙计们,当我执行这个算法(猜谜游戏)时,它不会停止要求我提供更多输入,即使当我写“退出”时,这应该是退出词。 “中断”命令不起作用,我不知道为什么。也许它有效,但是当它退出循环时,它会执行底部的“startgame()”,但我需要底部的这个“startgame()”来使游戏第一次运行,因为游戏在里面一个函数,我需要调用它来开始游戏。
import random
def startgame():
a = random.randint (1,10)
cont = 0
while True:
b = input("Guess a number: ")
if b == 'quit':
break
elif int(b) > a:
print("Too high!")
cont += 1
True
elif int(b) < a:
print ("Too low!")
cont += 1
True
elif int(b) == a:
print ("You got it right!")
print ('You needed ',cont,'guesses!')
startgame()
startgame()
关于如何解决这个问题有什么想法吗?
最佳答案
您的代码有一些小问题,但它确实有效,只是您没有进行足够的测试来发现实际问题。
问题:
True
行不执行任何操作,while
循环不需要它们;while
将评估紧随其后的True
并永远循环。- 您在字符串中混合使用单引号和双引号 - 这会很难阅读并且很快就会令人困惑,因此您最好使用一种样式,最好是 PEP8 推荐的样式。 https://www.python.org/dev/peps/pep-0008/
问题:
- 你的
break
工作得很好;尝试运行脚本并在第一个提示时输入“quit”,它会按预期退出。 - 它似乎不起作用的原因是您在赢得游戏后再次调用
startgame
函数来重新启动整个游戏。这会导致游戏内发生新的嵌套调用(想想“盗梦空间”),并且当游戏中断时,它最终会回到上一个关卡。
解决方案是删除对 startgame()
的调用,然后在一秒钟内包装整个事情,例如如下所示:
import random
def startgame():
b = 0
while b != 'quit':
a = random.randint(1, 10)
cont = 0
while True:
b = input('Guess a number: ')
if b == 'quit':
break
elif int(b) > a:
print('Too high!')
cont += 1
elif int(b) < a:
print('Too low!')
cont += 1
elif int(b) == a:
print('You got it right!')
print('You needed ', cont, 'guesses!')
startgame()
关于python - 如何停止Python中的While循环? (我尝试过使用中断),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52069552/