在Python中使用递归将元素及其类型写入文本文件

时间:2018-10-06 23:36:11

标签: python recursion

我对Python很陌生,所以请多多包涵。我目前正在尝试使用递归创建一个函数,该函数将遍历列表,并且对于整数的每个项目,都会将其写入文本文件I(对于整数)+值。这是我到目前为止的内容: 任何帮助将不胜感激!

def save(file, value):
    output = ''
    if len(value) == 0:
        pass
    else:
        element = value[0]
        if type(element) == int:
            output += 'I' + element
            save(f, element+1)
        else:
            pass
    print(output)

a = ['this', 'is', 'a', 'list', 1, 2, 3, 4]


with open('forlater.txt', mode='w') as f:
    save(f, a)

3 个答案:

答案 0 :(得分:0)

在递归调用中传递参数的方式似乎有几个问题。第一个问题是,在递归调用中,您将一个整数传递为value,但是value是一个列表(更好的命名对此会有帮助)。第二个原因是output不会在递归调用中传递,也不会返回。

另一个问题是,如果save的类型不是element,则不会再次调用int,因此,从{1}的第一个元素开始,当前save仅被调用一次a是一个字符串。

记住这些,这是代码的重构:

def save(file, values, output=''):
    if len(values) == 0:
        f.write(output)
    else:
        element = values[0]
        if type(element) == int:
            output += 'I' + str(element)

        #outside `if` block
        remaining_values = values[1:]
        save(f, remaining_values, output=output)


a = ['this', 'is', 'a', 'list', 1, 2, 3, 4]

with open('forlater.txt', mode='w') as f:
    save(f, a)

其中,将以下内容写入文件:

I1I2I3I4

您可能需要添加一些间距或换行。

还要考虑到这个问题实际上并不需要使用递归,for循环将是完成工作的更简单方法:

def save(file, values):
    output = ''
    for element in values:
        if type(element) == int:
            output += 'I' + str(element)

    f.write(output)

答案 1 :(得分:0)

您不需要递归来执行此操作,您只需要遍历列表,并为每个元素编写所需的内容。用以下代码替换函数的第一个if else块:

for element in value:
    if type(element) == int:
        output = 'I' + str(element)
        f.write(output)

您还可以使用列表理解

[f.write('I' + str(element) for element in value if type(element) == int] 

答案 2 :(得分:0)

如果要使用递归:

def my_homework(list, file):
    if len(list) > 1:
        my_homework(list[1:], file)
    if isinstance(list[0], int):
        print("I" + str(list[0]), file=file)

这不会保持您的订单顺序。