我试图找到一个带有两个字符串的递归函数,如果string1是string2的子字符串则返回true,否则返回false,否则如果str2以str1开头则递归检查。
我试试这段代码,但它不起作用我不知道为什么!
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()
谢谢你!
答案 0 :(得分:0)
您的程序首先会遇到一些语法问题:
subs
函数。subs
是main
的内部函数。虽然技术上不正确,但使用内部函数会使代码更难以阅读。您还有一些语义问题:
subs
仅在转义条件下返回true,没有默认的返回值。这是不好的做法subs
正在检查s2 == 0
,它永远不会是 - 字符串赢得等于0.空字符串是Falsy,所以你可以使用{{来检查字符串是否为空1}}而不是if not s2:
以s2
开头时才会发生递归,这意味着如果s1 =' ab'并且s2 =' habc',即使s1是s2的子字符串,它也不会触发递归。我的建议是重新检查你的算法。首先确定如何首先开始寻找候选子字符串,然后确定您的逃逸条件是什么,然后将问题分解为更小的问题。
答案 1 :(得分:-1)
我重写了你写的代码,但保持了直觉。主要问题是:
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()