我想通过使用递归函数来实现代码,而不使用for循环或while循环。
我想实现名为go_through()的函数和将两个参数作为列表(list1)和一个整数(字母),以便每个字符串长度的元素都具有大于或等于整数,我替换它使用另一个名为replace_it()的函数
def go_through(list1, letters):
get_list = list1[:]
num =len(list1)
index = 0
if index != num:
if len(get_list[0]) >= letters:
get_list += replace_it(get_list[0])
index += 1
print(get_list, 'True')
return go_through(get_list[1:], letters)
else:
get_list += [get_list[0]]
index += 1
print(get_list, 'False')
return go_through(get_list[1:], letters)
else:
print(get_list)
def replace_it(string):
if string == 'pineapple':
return ['peach', 'and', 'pear']
if string== 'delicious':
return ['really', 'gross']
go_through(['pineapple','is','delicious','I', 'want', 'it'],7)
应该看起来像
peach and pear is really gross I want it
所以我对此代码有疑问 它不允许我停止打印,因为我要打印的是一行
结果看起来就像我附上的图片 但是我想停止我突出显示的位置并返回它,因为它与我上面写的相同。
如何解决此问题?
答案 0 :(得分:3)
该列表在任何时候都没有减少。 get_list += [get_list[0]]
块中的else
会在return go_through(get_list[1:], letters)
后跟列表时保持相同的大小,而get_list += replace_it(get_list[0])
中的if
将始终扩展列表。
也许你的意思是
else:
# this isn't needed
# get_list += [get_list[0]]
return go_through(get_list[1:], letters)
此外,似乎你可能会在第一位混淆列表顺序。
if len(get_list[0]) >= letters:
# this is adding the new list at the end, not replacing the word
# get_list += replace_it(get_list[0])
# you can send the shortened list to the function again,
# and stick the replacement words at the start
return replace_it(get_list[0]) + go_through(get_list[1:], letters)