изменение значения переменной в python - PullRequest
0 голосов
/ 11 января 2019

Я новичок в питоне. Вот код Python:

def nested (the_list,count):

    for element in the_list:
        if (isinstance(element,list)):
            count=count+2
            nested(element,count)
        else:
            print("count",count, end=" ")
            spaceGiver(count)
            print(element)        


def spaceGiver(number):
    while (number > 0):
      print(" ",end="") 
      number=number-1


familyName = [1,[11,12,13],2,[21,[211,212]],3]
space=2
nested(familyName,space)

и вывод:

$python3 main.py
count 2   1
count 4     11
count 4     12
count 4     13
count 4     2
count 6       21
count 8         211
count 8         212
count 6       3

почему счетчик меняется с 8 на 6 . Как меняется значение переменной?

Ответы [ 2 ]

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

Я знаю, что я катаюсь на тонком льду, говоря, что ваше решение вашей проблемы неверно, но здесь говорится: Проблема с вашим исходным кодом заключалась в следующем:

count=count+2
nested(element,count)

Что должно было быть:

nested(element, count + 2)

Не требуется глобально. Проблема с вашим решением состоит в том, что [11,12,13] все печатают на одном уровне (хорошо), а [1,...,2,...,3] нет, даже если они находятся на одном уровне списка. Я предлагаю более простое решение:

def nested(the_list, count):

    for element in the_list:
        if isinstance(element, list):
            nested(element, count + 2)
        else:
            print(" " * count, element)

familyName = [1, [11, 12, 13], 2, [21, [211, 212]], 3]

nested(familyName, 2)

с выводом:

% python3 test.py
   1
     11
     12
     13
   2
     21
       211
       212
   3
% 

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

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

Я решил эту проблему, взяв глобальную переменную. Во время рекурсии локальная переменная теряла значение после некоторой итерации.

http://tpcg.io/EWXGUO

...