9_Andr
Фев. 17, 2019 17:33:55
Пытаясь забороть рекурсию, стал решать задачки и столкнулся с неожиданной проблемой:
Не получается вытащить значение из программы.
n = 15
def f(x):
if x == 1:
return x
elif x > 0:
f(x - 5)
f(x - 3)
print( f(n) )
На выходе получаю None
Как так?
Если что, условие звучит так:
Определить можно ли с использованием только операций «прибавить 3» и «прибавить 5» получить из числа 1 число N (N - натуральное, не превышает 106). Разумеется, само число 1 получить можно, просто не применяя никаких операций.
py.user.next
Фев. 18, 2019 02:51:55
9_Andr
На выходе получаю None
Потому что у тебя там пропущен return.
>>> def f():
... if False:
... return 1
...
>>> print(f())
None
>>>
>>> def f():
... if False:
... return 1
... return 2
...
>>> print(f())
2
>>>
9_Andr
Фев. 22, 2019 18:58:37
py.user.next
Но если я напишу return вне условия я, очевидно, не смогу проверить на это условие x
Наверно, я чего-то не вижу.
Rafik
Фев. 22, 2019 19:33:28
9_Andr
Но если я напишу return вне условия я, очевидно, не смогу проверить на это условие x
Если return до условия, то Ваше утверждение справедливо. Если return расположен после условия или целого каскада условий, тогда Ваше утверждение неправильно. В этом случае на return вне условия попадём только, если условие не будет выполнено где-нибудь в условии. Ведь выполнение условия выдаст return внутри условия и прощай оставшаяся часть кода, расположенная дальше этого условия.
9_Andr
Фев. 23, 2019 10:40:50
Как ни пытался менять местами return, ничего не вышло. Узнал про global и все запустилось
n = int(input())
t = ‘NO’
def f(x):
if x == 1:
global t
t = ‘YES’
elif x > 0:
f(x - 5)
f(x - 3)
if n < 20:
f(n)
print(t)
else:
print('YES')
Rafik
Фев. 24, 2019 16:58:28
9_Andr
Табуляция пропадает
Помещай код в тэг. Для этого в форме сообщения, рядом со смайликом имеется голубой значок <> на фоне листа бумаги. Попробуй навести на него мышку и выбрать из списка Python. Создастся тэг, внутрь которого можно поместить твой питоновский код. Форматирование никуда не будет деваться.