#python #python-2.7
#python #python-2.7
Вопрос:
Я новичок в python и, пробуя небольшое упражнение по кодированию, у меня возникли небольшие проблемы при выполнении return
в определенном блоке else. Приведенный ниже код принимает число и умножает каждую цифру до тех пор, пока результат не станет однозначным.
Что я делаю не так?
def persis(n):
convert_str = str(n)
indi_num = [int(i) for i in convert_str ]
result = reduce(lambda x,y: x*y, indi_num)
#######
final = None
new_result = str(result)
new_indi_num = [int(i) for i in new_result]
if len(new_indi_num) > 1:
persis(int(new_result))
else:
print "FINAL RESULT IS: " str(new_indi_num)
## return str(new_indi_num) # This Returns None From here##
pas=persis(162)
print pas
Это выводит меня
FINAL RESULT IS: [2]
None
Комментарии:
1. Поместите свой return на тот же уровень идентификации, что и
else
оператор.2. @MaximilianPeters по-прежнему говорит, что нет
Ответ №1:
Это работает:
from functools import reduce
def persis(n):
convert_str = str(n)
indi_num = [int(i) for i in convert_str ]
result = reduce(lambda x,y: x*y, indi_num)
#######
final = None
new_result = str(result)
new_indi_num = [int(i) for i in new_result]
if len(new_indi_num) > 1:
return persis(int(new_result))
else:
print "FINAL RESULT IS: " str(new_indi_num[0])
return new_indi_num[0]
pas=persis(162)
print pas
Это выводит
FINAL RESULT IS: 2
2
Ответ №2:
Вам нужно изменить persis(int(new_result))
на return persis(int(new_result))
(и вам нужно раскомментировать исходную return
инструкцию).
Это рекурсивная функция. Происходит то, что существует по крайней мере два вызова этой функции: «родительский» вызов, который вводит if
инструкцию и выполняет другой вызов (дочерний вызов) для persis
, и дочерний вызов, который вызывается родительским и входит в блок else. Как только вы раскомментируете оператор return, дочерний вызов корректно вернет желаемое значение; однако он возвращает это значение родительскому, который ничего с ним не делает. Изменяя persis(int(new_result))
на return persis(int(new_result))
, вы убедитесь, что родительский вызов возвращает то же самое, что и дочерний.