我应该编写一个递归函数,该函数接受一个字符串列表或一个字符串列表,如果找到,则返回不带元音的列表。以下是我解决问题的尝试:
def noVow(seq):
keys = ['a','i','e','o','u','u']
if not seq or not isinstance(seq, list) :
return
else:
if seq[0] in keys:
del seq[0]
return (noVow(seq[0:]))
else:
return (noVow(seq[1:]))
li = ["b", "c", "d","a"]
print (noVow(li))
我意识到bug存在于我的基本情况中,但是我无法想出正确的基本情况。在
注意递归函数必须用纯函数编程编写,即不允许有副作用。在
嗯,您是在递归调用中对原始列表进行切片,所以有一个拷贝不同于同一个列表。在
更重要的是,您的代码实际上可以工作,但是由于您传递的是列表的一个切片,那么片段中的元音项(不是原始列表)将被删除,而原始的元素保持不变。在
您可以使用一个从原始列表的开始到结束的非切片变体:
最后,如果要打印结果,则不应该打印函数调用的输出(将是
None
),而应该打印列表。在试验:
^{pr2}$你的基本情况返回一个None。因此,每当您传递空列表时,None都会被发送到递归调用的堆栈中。在
此外,您没有存储不是元音的字符,所以您的else大小写是错误的。在
你能得到的是这样的东西:
另外,
seq[0:]
相当于seq
。在列表的酷解包是Python3的一个特性,与函数式编程的模式匹配非常相似。在
相关问题 更多 >
编程相关推荐