Python 3.x 而loop会打印很多次mesage

Python 3.x 而loop会打印很多次mesage,python-3.x,Python 3.x,我的代码要求用户输入一个数字,如果这个数字是一个整数,并且小于20,那么它就完成了,如果不是,它应该打印“error,try-ear”,让我们再试一次,但是它只是不正常地打印消息,没有结束 good1 = False while not good1: storage = input("A number") try: int(storage) good1 = True good2 = False while not g

我的代码要求用户输入一个数字,如果这个数字是一个整数,并且小于20,那么它就完成了,如果不是,它应该打印“error,try-ear”,让我们再试一次,但是它只是不正常地打印消息,没有结束

good1 = False
while not good1:
    storage = input("A number")
    try:
        int(storage)
        good1 = True
        good2 = False
        while not good2:
            if int(storage) > 20:
                print("Error, try again.")
            else:
                print("--")
    except ValueError:
        print("Error, try again.")

您从未更改过
good2
的值,因此该值始终为真并持续打印

尝试打破内部循环。另外,请注意,您已将
good1
设置为
True
,因此即使它大于20,现在也是好的,如果它大于20,您需要将它设置为
False
,以使程序再次要求输入新的数字。代码应该是这样的

good1 = False
while not good1:
    storage = input("A number")
    try:
        int(storage)
        good1 = True
        good2 = False
        while not good2:
            if int(storage) > 20:
                print("Error, try again.")
                good1 = False
            else:
                print("--")
                good2 = True;
            break
        if good2:
            break
    except ValueError:
        print("Error, try again.") 


您从未更改过
good2
的值,因此该值始终为真并持续打印

尝试打破内部循环。另外,请注意,您已将
good1
设置为
True
,因此即使它大于20,现在也是好的,如果它大于20,您需要将它设置为
False
,以使程序再次要求输入新的数字。代码应该是这样的

good1 = False
while not good1:
    storage = input("A number")
    try:
        int(storage)
        good1 = True
        good2 = False
        while not good2:
            if int(storage) > 20:
                print("Error, try again.")
                good1 = False
            else:
                print("--")
                good2 = True;
            break
        if good2:
            break
    except ValueError:
        print("Error, try again.") 


那是因为你有

while not good2:

这是永恒的。因为你基本上说的是while true,检查int是否大于等于20。如果是,则post error else post“-”。然后if语句继续运行,因为good2从未更改为false(或者更确切地说,true是因为notgood2)

这是因为

while not good2:

这是永恒的。因为你基本上说的是while true,检查int是否大于等于20。如果是,则post error else post“-”。然后if语句继续运行,因为good2从未更改为false(或者更确切地说,true是因为NOT good2)

您可能正在寻找类似以下内容:

good_number = False

while not good_number:
    storage = input("A number")
    try:
        if int(storage) > 20:
            print("Error, try again.")
        else:
            print("--")
            good_number = True
    except ValueError:
        print("Error, try again.")

您可能正在寻找以下内容:

good_number = False

while not good_number:
    storage = input("A number")
    try:
        if int(storage) > 20:
            print("Error, try again.")
        else:
            print("--")
            good_number = True
    except ValueError:
        print("Error, try again.")

请调试你的程序。您从未将
good2
False
切换到任何其他值,因此if将永远不会离开循环!请调试你的程序。您从未将
good2
False
切换到任何其他值,因此if将永远不会离开循环!我更改了它,但现在我无法再次尝试输入数字,代码刚刚结束,尽管上述方法不是解决手头问题的最佳算法。正如@Zachary Blackwood给出的那样,只有一个布尔标志
good
就足够了,但这里我想向您解释如何编写您想到的算法,而不是如何解决问题。:)我更改了它,但现在我无法再次尝试输入数字,代码刚刚结束,尽管上述方法不是解决手头问题的最佳算法。正如@Zachary Blackwood给出的那样,只有一个布尔标志
good
就足够了,但这里我想向您解释如何编写您想到的算法,而不是如何解决问题。:)