我对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)
答案 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)
这不会保持您的订单顺序。