Как исправить локальную переменную 'result', на которую ссылаются перед присваиванием '' - PullRequest
0 голосов
/ 27 января 2019
      8     if n != 0:
      9         y = n%10 #figure out the least number like 12345 is 5
---> 10         result.append('y')
     11         get_digits(n//10)#like 12345 becomes 1234
     12 

локальная переменная 'result', на которую ссылается перед присваиванием

как я могу это исправить? Спасибо за помощь

если я сделаю это, это сработает:

result = []
def get_digits(n):
        if n>0:
               result.insert(0,n%10)
               get_digits(n//10)

get_digits(12345)
print(rsult)

Это мой последний код, в нем есть ошибка, но я не могу это исправить

## input 12345 ,output[1,2,3,4,5]

result = []#define a empty list

def get_digits(n):    
    if n == 0:
        result = list(reversed(result))#reverse the list,if not output[5,4,3,2,1]
        return result
    if n != 0:
        y = n%10#figure out the least number like 12345 is 5
        result.append('y')
        get_digits(n//10)#like 12345 becomes 1234

print(get_digits(12345))    

[1,2,3,4,5]

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Проблема в том, что result определен вне вашей функции в глобальной области видимости, поэтому ваша функция не может быть присвоена переменной.Вы можете явно разрешить это, добавив оператор global result:

result = []

def get_digits(n):  
    global result  
    # ...

print(get_digits(12345)) все равно не будет работать, поскольку get_digits(n//10) ничего не возвращает;вам понадобится что-то вроде

get_digits(12345)
print(result)

Однако вместо использования глобальной переменной я бы порекомендовал определить result в вашей функции и вернуть ее, а также, когда вы рекурсивно вызываете get_digits вваша функция.

def get_digits(n):
    def helper(result, n):
        if n == 0:
            result = list(reversed(result))
            return result
        else:
            result.append(n % 10)
            return helper(result, n // 10)
    return helper([], n)

Тогда print(get_digits(12345)) будет работать нормально.

0 голосов
/ 27 января 2019

Скажите python result является переменной global:

result = [] #define a empty list

def get_digits(n):
    global result  # add this line here to reference your result variable above
    if n == 0:
        result = list(reversed(result)) #reverse the list,if not output[5,4,3,2,1]
        return result
    ...
...