编写一个名为string_finder的函数。 string_finder应该 采用两个参数:目标字符串和搜索字符串。 该函数将在 目标字符串。
该函数应返回一个字符串,该字符串表示 找到搜索字符串的目标字符串:
如果搜索字符串位于目标的最开始 字符串,然后返回“ Beginning”。例如:
string_finder("Boston Common", "Boston") -> "Beginning"
如果搜索字符串位于目标字符串的末尾, 然后返回“结束”。例如:
string_finder("Boston Common", "Common") -> "End"
如果搜索字符串在目标字符串中,但不在目标字符串中 从头开始或从头开始,然后返回“中。 例如:
string_finder("Boston Common", "ton") -> "Middle"
如果搜索字符串根本不在目标字符串中,则 返回“未找到”。例如:
string_finder("Boston Common", "Idaho") -> "Not found"
假设我们只对初审感兴趣 如果搜索字符串多次出现在搜索字符串中 目标字符串,并且该搜索字符串绝对是 比目标字符串短。
我能够在Python 3中编写一个利用条件(if,elif和else)和find()方法的函数。在某些使用find()方法的条件中,我使用了所有三个参数对于find()方法,它是字符串,起始索引和结束索引。
def string_finder(target_string, search_string):
if search_string.find(target_string, 0, len(search_string)):
return "Beginning"
elif search_string.find(target_string, -1, -(len(target_string) - len(search_string))):
return "End"
elif search_string.find(target_string):
return "Middle"
else:
return "Not found"
下面是一些将测试您的功能的代码行。 您可以更改变量的值以测试您的 具有不同输入的功能。
如果您的功能正常运行,则最初 打印:开始,中间,结束,未找到,每个都有 线。
print(string_finder("Boston Common", "Boston"))
print(string_finder("Boston Common", "ton"))
print(string_finder("Boston Common", "Common"))
print(string_finder("Boston Common", "Idaho"))
应打印
Beginning
Middle
End
Not found
但是,使用我当前的代码,我得到:
Beginning
Beginning
Beginning
Beginning
我不知道如何弄乱我的条件和如何调整。另外,我愿意采用任何更好的方法来解决此问题。
答案 0 :(得分:0)
首先,您的第二个if应该是“ elif”。如果您这样操作,它将起作用:
def string_finder(target_string, search_string):
if search_string.find(target_string, 0, len(search_string)):
print("Beginning")
elif search_string.find(target_string, -1, -(len(target_string) - len(search_string))):
print("End")
elif search_string.find(target_string):
print("Middle")
else:
print("Not found")
string_finder("Boston Common", "ton")
答案 1 :(得分:0)
find
函数(docs here)在找不到子字符串时返回-1(并返回找到该字符串的最低索引),并且-1解释为{{1} }(docs for truth/false in python here),因此第一个True
将始终为true。
您应该检查返回的值是否与if
不同。或者,如果需要,您可以检查返回的值是否告诉python在哪里找到了字符串:
-1
让我解释一下代码构想:
正如def string_finder(target_string, search_string):
start_index = search_string.find(target_string)
end_index = start_index + len(target_string)
if start_index == -1: # Not found, find returns -1
return "Not found"
elif start_index == 0:
return "Beginning"
elif end_index == len(search_string):
return "End"
else:
return "Middle"
的文档所说,它“返回找到子字符串sub的字符串中的最低索引”。因此,find
代表start_index
在search_string
中的起始位置。然后target_string
表示end_index
在search_string
中的结束位置。因此,如果target_string
为0(第一个位置),则它位于字符串的开头。如果您的start_index
等于end_index
,它将一直持续到len(target_string)
的结尾。