Python 递归函数以查找string2的字符串1子字符串
我试图找到一个递归函数,如果string1是string2的子字符串,则返回true;否则,通过递归检查str2是否以str1开头,则返回false 我尝试这个代码,但它不工作,我不知道为什么Python 递归函数以查找string2的字符串1子字符串,python,python-2.7,function,recursive-query,Python,Python 2.7,Function,Recursive Query,我试图找到一个递归函数,如果string1是string2的子字符串,则返回true;否则,通过递归检查str2是否以str1开头,则返回false 我尝试这个代码,但它不工作,我不知道为什么 def main(): s1 = input("enter string") s2 = input("enter steing") sub = subs(s1,s2) print(sub) def subs(s1, s2): if s2 == 0:
def main():
s1 = input("enter string")
s2 = input("enter steing")
sub = subs(s1,s2)
print(sub)
def subs(s1, s2):
if s2 == 0:
return True
else:
if s2.startswith((s1)):
subs(s1, s2[1:])
return True
main()
谢谢大家! 您的程序首先有几个语法问题:
subs
函数subs
是main
的一个内部函数。虽然在技术上并不错误,但使用内部函数会使代码更难阅读subs
仅在转义条件下返回true,没有默认返回值。这是拙劣的做法subs
正在检查s2==0
,它永远不会是-strings不等于0。空字符串是错误的,因此您可以使用if not s2:
检查字符串是否为空s2
以s1
开头时,才会发生递归,这意味着如果s1='ab'和s2='habc',即使s1是s2的子字符串,也不会触发递归我的建议是重新检查你的算法。首先确定如何开始寻找候选子字符串,然后确定转义条件,然后确定如何将问题分解为较小的问题。我重写了您编写的代码,但直觉保持不变。主要问题是: 1.许多地方的缩进错误 2.调用后的函数定义 3.查找空字符串的方法错误
def main():
def subs(s1, s2,k):
#If input string is empty .
if k==0 and not s2.strip():
print("Yes")
return 0
#String 1 not empty and search for the sub-string.
elif s1.strip() and s1.startswith(s2):
print("Yes")
return 0
#String 1 not empty and sub-string not matched.
elif s1.strip():
subs(s1[1:],s2,1)
#String empty and sub-string not match.
else :
print("No")
s1 = input("enter string")
s2 = input("enter sub-string")
sub = subs(s1,s2,0)
#print(sub)
main()
您没有返回递归调用的结果。也许还有其他的问题,但这正是我突然想到的。他的回答没有任何地方是错误的;谢谢你,我会尽力去做的。。关于第三点,你能帮我写代码吗?因为我试过很多次了,但都不管用,所以你有一个好主意,只是还没有充实出来。如果s2或s1为空,那么我们应该绝对返回false,对吗?因为你不能有一个空的子串。如果这不是真的,那么如果s2从s1开始,那么我们有一个子字符串,我们应该返回真。但是,如果不是(这是您错过的),那么我们应该返回递归函数subs的值,并切掉s2的第一个字母。这种逻辑有意义吗?你能把它翻译成代码吗?def subs(s1,s2):if s1或s2==“”:return False else:for i in range(len(s2)):if s2.startswith((s1)):return True else:return(subs(s1,s2[i:])我这样写,但每次都会导致Falsetime@haymk不幸的是,代码格式在注释中不起作用,来吧,我可以帮你。