需要帮助,了解为什么我对find()方法的使用无法正确执行

时间:2019-04-02 19:52:24

标签: python string function methods find

编写一个名为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

我不知道如何弄乱我的条件和如何调整。另外,我愿意采用任何更好的方法来解决此问题。

2 个答案:

答案 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_indexsearch_string中的起始位置。然后target_string表示end_indexsearch_string中的结束位置。因此,如果target_string为0(第一个位置),则它位于字符串的开头。如果您的start_index等于end_index,它将一直持续到len(target_string)的结尾。