Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中停止While循环?(我尝试过使用break)_Python_Loops_While Loop_Break - Fatal编程技术网

如何在python中停止While循环?(我尝试过使用break)

如何在python中停止While循环?(我尝试过使用break),python,loops,while-loop,break,Python,Loops,While Loop,Break,这是我第一篇关于编程的帖子! 伙计们,当我执行这个算法(一个猜谜游戏)时,它不会停止要求我更多的输入,甚至当我写“退出”时,这应该是退出的词。“中断”命令不起作用,我也不知道为什么。也许它能工作,但当它退出循环时,它会执行底部的“startName()”,但我需要底部的这个“startName()”,使游戏第一次运行,因为游戏在一个函数中,我需要调用它来启动游戏 import random def startgame(): a = random.randint (1,10) c

这是我第一篇关于编程的帖子! 伙计们,当我执行这个算法(一个猜谜游戏)时,它不会停止要求我更多的输入,甚至当我写“退出”时,这应该是退出的词。“中断”命令不起作用,我也不知道为什么。也许它能工作,但当它退出循环时,它会执行底部的“startName()”,但我需要底部的这个“startName()”,使游戏第一次运行,因为游戏在一个函数中,我需要调用它来启动游戏

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()
随机导入
def startgame():
a=random.randint(1,10)
cont=0
尽管如此:
b=输入(“猜一个数字:”)
如果b==‘退出’:
打破
elif int(b)>a:
打印(“太高!”)
cont+=1
真的
elif int(b)
关于如何解决这个问题有什么想法吗?

只需从循环内部移除startName(),然后用break替换它

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

        elif int(b) < a:
            print ("Too low!")
            cont += 1

       elif int(b) == a:
            print ("You got it right!")
            print ('You needed ',cont,'guesses!')
            break # remove this break statement if you want to restart it again after winning  

startgame ()
随机导入
def startgame():
a=random.randint(1,10)
cont=0
尽管如此:
b=输入(“猜一个数字:”)
如果b==‘退出’:
打破
elif int(b)>a:
打印(“太高!”)
cont+=1
elif int(b)
您的代码有一些小问题,但实际上是可行的,您只是没有进行足够的测试来发现实际问题

这些问题:

  • True
    行没有任何作用,在
    while
    循环中不需要它们;
    while
    将在它之后立即计算
    True
    ,并永远循环
  • 您正在混合字符串的单引号和双引号-这很难阅读,而且很快就会混淆,所以最好使用一种样式,最好是PEP8推荐的样式
问题是:

  • 您的
    中断
    工作正常;尝试运行脚本并在第一次提示时输入'quit',它将按预期退出
  • 它似乎不起作用的原因是,您在赢得游戏后再次调用
    startgame
    函数重新启动了整个游戏。这会在游戏中产生一个新的嵌套调用(想想“Inception”),当游戏中断时,它会在上一个级别结束
一个解决方案是删除对
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()
随机导入
def startgame():
b=0
而b!='退出':
a=random.randint(1,10)
cont=0
尽管如此:
b=输入('猜一个数字:')
如果b==‘退出’:
打破
elif int(b)>a:
打印('太高!')
cont+=1
elif int(b)
对于这种情况,我通常使用一个简单的控制变量并在其上运行循环。例如:

right_guess=False
while not right_guess:
然后就走吧

if guess=right:
    right_guess=True
    break 

这会有所帮助,但会改变游戏流程,游戏在获胜后不再重新启动。如果他想在获胜后重新启动游戏,则意味着他可以删除break语句此代码在Python 2中失败。我相信这和原来的海报是一样的问题。结果是
TypeError:int()参数必须是字符串或数字,而不是“Quitter”
。我同意需要删除
startgame
调用。当我执行此代码时,我会不断获取相同的随机数。有点不对@AlexTaylor认为该问题不适用于此脚本。该脚本按预期在Python2上工作。这条消息似乎表明您正在运行“Programming Python,3rd Edition”中quitter模块的代码;但是,如果从函数中删除代码,则可以删除它@RafaelSouza在Python 2中,
PYTHONHASHSEED
的默认设置是禁用的。这会导致随机函数始终以相同的值开始。根据分布情况可能有所不同。自己提供一个种子(例如时间戳),以便每次都获得一个新序列。