Python函数循环到无限循环中

时间:2017-10-03 20:01:21

标签: python python-3.6

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

当我在打印命令后取出 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()

不能正常工作的是当我输入除整数之外的任何东西时,它应该说&#34;不是整数!再试一次。&#34; 但它会循环播放。我怎么能解决这个问题,因为我没有看到它会循环的原因。

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

3 个答案:

答案 0 :(得分:3)

不要使用递归来替换循环; 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()

答案 1 :(得分:0)

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

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()

答案 2 :(得分:0)

解决此问题的一种方法是,为了理解循环发生的原因,当您打算不这样做时,是绘制流程的流程图

有些简化,你有inputNumber() - &gt; inputNumber()

inputNumber()函数中,函数本身可能会被调用两次:

第8行

第17行

然后会发生的是该功能本身会重启。此外,一旦内部函数解析,解释器将返回函数调用结束的位置并继续到程序结束。

请参阅下面的评论:

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

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