def countSubStringMatchRecursive(target,key):
"""Counts how many times key is in string(string,key)"""
x=find(target,key)
print x
return x!=-1 and countSubStringMatchRecursive(target[x+1:],key)+1
所以这个程序接受一个给定的字符串,并计算一个子字符串在其中显示的次数。因此,给定目标'banana'并键'an',函数将吐出2.
我对它如何做到这一点很困惑。 x!= 1是否使得程序只返回x不等于1?我假设countSubStringMatchRecursive结尾处的+1 ......作为回报,它在某种程度上是在计数。
答案 0 :(得分:2)
正如jhwist所说,String.find
返回匹配的最低索引。因此,只有在实际找到子字符串时才会发生递归(否则String.find返回-1)。
这是一种非常低效的方法。 Python支持此功能,称为str.count(sub[, start[, end]])
。记录在这里:http://docs.python.org/library/stdtypes.html#str.count。
所以而不是
countSubStringMatchRecursive("test test test test", "test")
你会用
"test test test test".count("test")
答案 1 :(得分:1)
x是找到的子字符串的位置索引。如果它为-1,则未找到,因此该方法返回0.
换句话说,它short-curcuits并且不评估第二个条件(例如,它不进行递归调用)。否则,它使用找到的子字符串的位置加上一个递归调用自身(因此我们可以找到下一个子字符串,如果它存在)并将结果加1。
答案 2 :(得分:0)
String.find返回匹配的最低索引。因此,只有在实际找到子字符串时才会发生递归(否则String.find返回-1)。
答案 3 :(得分:0)
我承认我对python知之甚少,但这很容易。
这就是最后一行。
“return”首先检查x是否不是-1,这意味着此函数的当前递归没有在“target”中找到额外的“key”,在“and”之后的子句将是不进行评估,函数将向调用函数返回“false”(零)。
但是,如果“x”确实不是-1,则将评估条件的第二部分(在“和”之后),并且该语句的作用是调用函数本身,但它发送当前的子字符串评估“目标”,在“x”之后开始一个字符(当前递归中“目标”中“键”的位置)。然后它将函数返回的值加1并返回总和。
因此,函数的最后一次递归返回零(false),前一次递归返回一次(true),另一次返回之前返回两次(true + 1),依此类推。
这听起来有点令人困惑,但这是我能找到回答你问题的最好方法。