Python 函数进入无限循环

Python Functions looping into a infinite loop

我正在尝试使用此程序从函数外部处理数字,但是当我 运行 该函数时,它将进入无限循环并且不会停止打印。

当我在打印命令后取出 inputNumber() 时它起作用了,但我需要它吗?

这是我的完整代码:

def inputNumber():
    try:
        print (userInput)
        Number2 = ('%02d' % (int(userInput)))
        print(Number2)
    except ValueError:
        print("Not an integer! Try again.")
        inputNumber()

    else:
        if int(Number2)<=10:
        #print("Correct")
        if len(str(Number2))==2:
            print("Number Is Good Continue")
        else:
            print("Try Again")
            inputNumber()
        else:
        print("Score Must Be Within 01-10")

userInput = input("Input Score")
inputNumber()

不起作用的一点是当我输入整数以外的任何东西时它应该说 "Not an integer! Try again." 但它会循环这个。我怎么能解决这个问题,因为我看不出它会循环播放的任何原因。

我试过使用 break 但它不起作用,因为我认为它在 while 循环中?

编辑了您的代码:请参阅以下内容

def inputNumber():
    userInput = input("Input Score: ")
    try:
        print (userInput)
        Number2 = ('%02d' % (int(userInput)))
        print(Number2)
    except ValueError:
        print("Not an integer! Try again.")
        inputNumber()

    else:
        if int(Number2)<=10:
            #print("Correct")
            if len(str(Number2))==2:
                print("Number Is Good Continue")
            else:
                print("Try Again")
                inputNumber()
        else:
            print("Score Must Be Within 01-10")

inputNumber()

解决此问题的一种方法是绘制流程的 流程图,以了解循环发生的原因(如果您不打算这样做)。

有点简化,你有 inputNumber()-->inputNumber()

在您的 inputNumber() 函数中,函数本身可能被调用两次之一:

第 8 行

第 17 行

然后发生的是函数本身将重新启动。此外,一旦内部函数解析,解释器 returns 到函数调用结束的地方并继续到程序结束。

请参阅下面我的评论:

def inputNumber(): # Define what happens when you call inputNumber()
    try:
        print (userInput)
        Number2 = ('%02d' % (int(userInput)))
        print(Number2)
    except ValueError:
        print("Not an integer! Try again.")
        inputNumber() # Call inputNumber()

    else:
        if int(Number2)<=10:
        #print("Correct")
        if len(str(Number2))==2:
            print("Number Is Good Continue")
        else:
            print("Try Again")
            inputNumber() # Call inputNumber()
        else:
        print("Score Must Be Within 01-10")

userInput = input("Input Score")
inputNumber() # Call inputNumber

这被称为递归,在某些内存限制下的特定上下文中可能是一个有用的应用程序,但它通常是一个应该在更高级的级别引入的概念 - 除非非常具体的问题需要递归。

不要用递归来代替循环; Python 不进行尾调用优化。只要循环直到输入可以转换为1到10之间的数字,此时你可以明确地跳出循环。

def input_number():
    while True:
        n = input("Input score: ")
        try:
            n = int(n)
        except ValueError:
            print("Not an integer! Try again.")
            continue

        if 1 <= n <= 10:
            print("Correct")
            break

        print("Score must be between 1 and 10")

    return '%02d' % (n,)

value = input_number()