2016-03-10 2 views
0

Я делаю упражнение из книги, где я должен писать программу, которая может принимать положительное целое число больше 2 и выписывать количество раз, которое нужно разделить этим числом на 2, прежде чем получить значение меньше чем 2.Получение возврата Нет значения

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?

+5

кажется, что вы забыли добавить 'return' право перед' положителен (п // 2, шаг + 1) '? – Ilya

+0

спасибо, должен быть более осторожным в следующий раз :) –

ответ

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() 
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 по умолчанию.

Смежные вопросы