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版本。