【问题标题】:Python integer list.append() operation issuePython 整数 list.append() 操作问题
【发布时间】:2019-05-03 22:24:00
【问题描述】:

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

对于本练习,我正在尝试创建一个程序,该程序接受一个数字并使用 recursive 函数来输出 syracuse 序列。

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

所以我的问题是:当我的 if nr!=1 循环中确实将变量“n”附加到它时,我的列表“seq”为什么会输出“无”。如何从循环中提取变量?这是我不明白的事情还是有其他的事情?

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

请注意,虽然我知道 Python 不适用于 递归 函数,但这是练习,我必须实现它。

【问题讨论】:

  • 您没有在递归中将seq 处理到下一个级别。因此,每个递归步骤都会创建一个自己的新版本 seq

标签: python list loops integer local-variables


【解决方案1】:

每次调用该函数时,都会重置列表。 为防止这种情况,请使用列表作为参数:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多