Python integer list.append()操作问题

Python integer list.append()操作问题,python,list,loops,integer,local-variables,Python,List,Loops,Integer,Local Variables,我想我在理解为什么我附加到列表中的整数只停留在循环内,而在循环外,列表是空的方面遇到了一些问题 在本练习中,我尝试创建一个程序,该程序接受一个数字,并使用递归函数输出雪城序列 import sys def syracuse(nr): ''' syracuse function ''' nr = int(nr) seq = [] if nr != 1: if (nr % 2 != 0): n = 3*nr+1

我想我在理解为什么我附加到列表中的整数只停留在循环内,而在循环外,列表是空的方面遇到了一些问题

在本练习中,我尝试创建一个程序,该程序接受一个数字,并使用递归函数输出雪城序列

import sys

def syracuse(nr):
    ''' syracuse function '''

    nr = int(nr)
    seq = []
    if nr != 1:
        if (nr % 2 != 0):
            n =  3*nr+1
        else:
            n = nr // 2
        seq.append(n)
        print(seq)
        syracuse(n)
    else:
        return seq

def main(argv):
    ''' main function '''
    if len(argv) == 2:
        print(syracuse(argv[1]))

    else:
        print("Error! One number should be included in the query."
        .format(argv[0]), file = sys.stderr)

if __name__ == '__main__':
    main(sys.argv)
输入“5”时,我的输出为:

[16]
[8]
[4]
[2]
[1]
None
所以我的问题是:为什么我的列表'seq'输出'None',当变量'n'在我的if nr中被附加到它之后=1圈。如何从循环中提取变量?这是我不明白的事情还是有别的事情

我希望我的问题是连贯的。提前谢谢


请注意,尽管我知道Python不能很好地用于递归函数,但这是一个练习,我必须实现它。

每次调用函数时,都会重置列表。 要防止出现这种情况,请将列表用作参数:

def syracuse(nr, seq=[]):
nr = int(nr)
if nr != 1:
    if (nr % 2 != 0):
        n =  3*nr+1
    else:
        n = nr // 2
    seq.append(n)
    print(seq)
    syracuse(n, seq)
else:
    return seq
在递归中,您没有将seq处理到下一个级别。因此,每个递归步骤都会创建一个新的seq版本。