接收返回无值

时间:2016-03-10 12:05:57

标签: python python-3.x

我正在从书中练习,我应该编写一个可以取大于2的正整数的程序,并写出在得到小于2的值之前必须重复将这个数除以2的次数。< / p>

def inStr():
n = -1
while n<2:
    try:
        n = int(input('Enter a positive integer greater than 2: '))
    except:
        pass
print(positive(n)) # prints None


def positive(n, step=0):
    if n < 2:
        # print(step) #it prints correct answer
        return step   #but why it returns None?
    positive(n//2, step+1)


inStr()

我不明白为什么def positive(n, step=0)会返回None

2 个答案:

答案 0 :(得分:2)

因为你没有告诉它返回任何其他内容。您需要将return放在那里:

def positive(n, step=0):
    if n < 2:
        # print(step) #it prints correct answer
        return step   #but why it returns None?
    return positive(n//2, step+1)

有时函数会调用自身,但不会想要返回结果。你需要告诉Python这次你想要的。由于您没有告诉Python要返回什么,因此默认情况下会返回None

答案 1 :(得分:2)

您似乎忘记在return之前添加positive(n//2, step+1)。因此,您的函数positive有时不返回任何内容(即None)。

试试这个:

def inStr():
    n = -1
    while n<2:
        try:
            n = int(input('Enter a positive integer greater than 2: '))
        except:
            pass
    print(positive(n)) # prints None


def positive(n, step=0):
    if n < 2:
        # print(step) #it prints correct answer
        return step   #but why it returns None?
    return positive(n//2, step+1)

inStr()