我尝试使用递归函数编写字符串匹配程序。函数首先创建一个名为tuple1的空列表来添加点。然后返回列表。但是,当我尝试使用此函数两次时,该函数会将点添加到在上一个函数中创建的列表中。为什么函数在第二次调用中不使用默认值tuple1=[]呢?有什么想法吗
程序的输出:
[0,3,5,9,11,12,15,19]
[0,3,5,9,11,12,15,19,0,5,15]
顺便说一句,这是麻省理工学院共享的开放式课程的作业
def subStringMatchExact(target, key, counter=0, tuple1=[]):
if len(target) < len(key):
return tuple1
else:
counter += 1
if target[:len(key)] == key:
tuple1.append(counter-1)
return subStringMatchExact(target[1:], key, counter, tuple1)
print(subStringMatchExact("atgacatgcacaagtatgcat", "a"))
print(subStringMatchExact("atgacatgcacaagtatgcat", "atg"))
当您使用可变对象作为默认值时,会出现混淆。这里,tuple1只是在每次调用函数时添加到列表中。以下是一个解决方案:
解决办法是:
你可以在这里阅读更多http://effbot.org/zone/default-values.htm
因为默认值是对默认值的引用,所以不会每次都创建它。 因此,如果您运行这样的示例:
解决方法可以是使用不可变的元组并将其转换为列表:
这样就行了
相关问题 更多 >
编程相关推荐