在python中更改变量的值

时间:2019-01-11 13:09:56

标签: python list recursion isinstance

我是python的新手。这是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 :(得分:0)

我已经通过使用Global变量解决了这个问题。递归过程中,局部变量经过一些迭代后失去了值。

http://tpcg.io/EWXGUO

答案 1 :(得分:0)

我知道我在溜冰上滑冰,说您对自己的问题的解决方案是错误的,但问题是:您原始代码的问题是:

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
% 

这证明了递归解决方案的合理性。但是请通过最后向我们解释您的程序应该做什么来指出我的不正确之处。