问题:我对
python很新,所以请耐心等待.这是一项家庭作业,我需要一些帮助.
因此,对于matchPat函数,我需要编写一个函数,该函数将接受两个参数str1和str2,并返回一个布尔值,指示str1是否在str2中.但是我必须在str1中使用星号作为通配符. *只能在str1中使用,它将代表我需要忽略的一个或多个字符. matchPat的示例如下:
matchPat(‘a * t * r’,’anteaters’):是的
matchPat(‘a * t * r’,’albatross’):是的
matchPat(‘a * t * r’,’artist’):错误
我当前的matchPat函数可以判断str1的字符是否在str2中,但我真的不知道如何告诉python(使用*作为外卡)来查找’a'(第一个字母)以及之后找到a,跳过下一个0或更多字符,直到找到下一个字母(在示例中为’t’),依此类推.
def matchPat(str1,str2):
## str(*)==str(=>1)
if str1=='':
return True
elif str2=='':
return False
elif str1[0]==str2[0]:
return matchPat(str1[2],str2[len(str1)-1])
else: return True
最佳答案 这里的基本思想是比较str1和str2中的每个字符,如果str1中的char是“*”,则在str2中找到str1中字符旁边的字符.
假设你不打算使用任何函数(除了find(),这可以很容易地实现),这是很难的方法(代码是直截了当但很混乱,我尽可能评论) –
def matchPat(str1, str2):
index1 = 0
index2 = 0
while index1 < len(str1):
c = str1[index1]
#Check if the str2 has run it's course.
if index2 >= len(str2):
#This needs to be checked,assuming matchPatch("*", "") to be true
if(len(str2) == 0 and str1 == "*"):
return True
return False
#If c is not "*", then it's normal comparision.
if c != "*":
if c != str2[index2]:
return False
index2 += 1
#If c is "*", then you need to increment str1,
#search for the next value in str2,
#and update index2
else:
index1 += 1
if(index1 == len(str1)):
return True
c = str1[index1]
#Search the character in str2
i = str2.find(c, index2)
#If search fails, return False
if(i == -1):
return False
index2 = i + 1
index1 += 1
return True
输出 –
print matchPat("abcde", "abcd")
#False
print matchPat("a", "")
#False
print matchPat("", "a")
#True
print matchPat("", "")
#True
print matchPat("abc", "abc")
#True
print matchPat("ab*cd", "abacacd")
#False
print matchPat("ab*cd", "abaascd")
#True
print matchPat ('a*t*r', 'anteater')
#True
print matchPat ('a*t*r', 'albatross')
#True
print matchPat ('a*t*r', 'artist')
#False