我正在编写一个函数,它接受两个参数:search string
和target string
。该函数将在目标字符串中查找搜索字符串,并应返回一个字符串,表示在目标字符串中找到搜索字符串的位置。
例如,如果目标字符串target_string = "Georgia Tech"
并且search_string = "Georgia"
它应该返回字符串"Beginning"
。如果搜索字符串"gia"
则应返回"Middle"
,如果搜索字符串"Tech"
则应返回"End">
法典:
def string_finder(target_string, search_string):
len_search = int(len(search_string))
len_target = int(len(target_string))
if search_string in target_string:
if target_string.find(search_string)<=len_search:
return "Beginning"
elif #***missing statement:***
return "Middle"
elif target_string.find(search_string, -len_search):
return "End"
else:
return "Not found"
代码似乎可以按现在工作,但我无法弄清楚应该满足什么条件才能确定搜索字符串位于目标字符串的中间。
我的猜测是该语句应如下所示:
target_string.find(search_string, len_str, len_dif ):
其中len_dif
是search_string和目标字符串长度之间的差异。通过这样做,它会打印正确答案,但会弄乱最终elif
。所以如果我运行以下代码
print(string_finder("Georgia Tech", "Georgia"))
print(string_finder("Georgia Tech", "gia"))
print(string_finder("Georgia Tech", "Tech"))
print(string_finder("Georgia Tech", "Nothing"))
它不打印"开始","中间","结束"和"未找到">,而是打印"开始","中间","中间"和"未找到"
"End"
的正确条件是查看是否s1.find(s2) + len(s2) == len(s1)
。
In [660]: def string_finder(s1, s2):
...: i = s1.find(s2)
...: if i == 0:
...: return "Beginning"
...:
...: elif i > 0:
...: if i + len(s2) == len(s1):
...: return "End"
...: else:
...: return "Middle"
...:
...: else:
...: return "Not Found"
...:
In [661]: string_finder("Georgia Tech", "Georgia")
...: string_finder("Georgia Tech", "gia")
...: string_finder("Georgia Tech", "Tech")
...: string_finder("Georgia Tech", "Nothing")
...:
Beginning
Middle
End
Not Found
你可以尝试这样的事情:
s = "Georgia Tech"
target = "Georgia"
if target in s.split():
the_index = s.split().index(target)
if the_index == len(s.split())-1:
print "end"
elif the_index == 0:
print "Beginning"
else:
the_index = s.index(target)
if the_index > 0 and the_index < len(s) -1:
print "middle"
elif the_index == 0:
print "Beginning"
elif the_index == len(s)-2:
print "end"
输出:
Beginning
您的代码确认搜索字符串位于目标字符串中。没关系。唯一的问题是您将返回其中一个结果字符串的情况。
我建议你计算一次字符串的位置,然后在其余代码中使用该数字:
pos = target_string.find(search_string)
if pos < len_search:
return "Beginning"
接下来,您不清楚对检查的"中间"部分使用什么条件。那也没关系。通常,当我不清楚这样的事情时,我只是让它成为"其余的"或"默认的"。
当你做一个if/elif类型构造时,"默认"是else:
块:
elif pos >= len_target - 2 * len_search:
return "End"
else:
return "Middle"
请注意,当搜索字符串在末尾"完全"时,str.find()
的结果将是搜索字符串开头的位置,即len_target - len_search
。如果你想在"结束"结果中有任何"模糊",你必须允许一些额外的。我选择使用2 * len_search
因为它一开始就符合您的津贴。
我发现以下代码相当清晰:
from __future__ import print_function
target_string = "Georgia Tech"
for search_string in ("Georgia", "gia", "Tech", "bla"):
print("Result of searching for %s in %s: " % (search_string, target_string),
end="")
if target_string.startswith(search_string):
print("Beginning")
elif target_string.endswith(search_string):
print("End")
elif target_string.find(search_string) != -1:
print("Middle")
else:
print("Absent")
这给了:
Result of searching for Georgia in Georgia Tech: Beginning
Result of searching for gia in Georgia Tech: Middle
Result of searching for Tech in Georgia Tech: End
Result of searching for bla in Georgia Tech: Absent
不要重新发明轮子。Python 有一些有用的字符串方法,你可以使用:
if target_string.startswith(search_string):
return 'Beginning'
elif target_string.endswith(search_string):
return 'End'
elif target_string in search_string):
return 'Middle'
else return 'Not Found'