Функции в python объявляют новую область видимости, поэтому N
не отображается в вашей функции. Вы можете обойти это, передав N
во внутреннюю область видимости, вот так:
T = int(input())
for i in range(T):
N = int(input())
def P(N):
M = [int(d) for d in str(N)]
N = sum(M) # this line was the actual culprit
if N<10:
print(N)
else :
return P(N)
P(N)
>>> 1 # test one time
>>> 12345 # cross total of 121212
6
Python консервативен в операциях записи. Хорошо только чтение из внешней области видимости, но повторное присвоение имени N
(что происходит, если вы пишете N = sum(M)
) заставляет его строго проверять переменную local с таким именем.
Как следствие, предполагается, что эта еще не объявленная переменная находится там, где вы хотите прочитать в строке над ней, что, честно говоря, немного вводит в заблуждение.
Для получения дополнительной информации о областях и пространствах имен в Python, проверьте здесь .