Нужна помощь Понимание, почему мое использование метода find () не выполняется правильно - PullRequest
0 голосов
/ 02 апреля 2019

Написать функцию с именем string_finder.string_finder должен принимать два параметра: целевую строку и строку поиска.Функция будет искать строку поиска в целевой строке.

Функция должна возвращать строку, представляющую, где в целевой строке была найдена строка поиска:

Если строка поиска находится на самомначало целевой строки, затем вернуть «Начало».Например:

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"

Предположим, что нас интересует только первый экземпляр строки поиска, если он появляется несколько раз в целевой строкеи эта строка поиска определенно короче целевой строки.

Я могу написать функцию, которая использует условные выражения (if, elif и др.) и метод find () в Python 3. В некоторых из моихусловные выражения с методом 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"

Ниже приведены некоторые строки кода, которые будут проверятьсяваша функция. Вы можете изменить значение переменной (ей), чтобы проверить вашу функцию с различными входами.

Если ваша функция работает правильно, она будет сначала печатать: Start, Middle, End, 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 голосов
/ 02 апреля 2019

Функция find ( документы здесь ) возвращает -1, когда она не находит подстроку (и возвращает самый низкий индекс, в котором она нашла строку), а -1 интерпретируется как True по python ( документы для истины / ложи в Python здесь ), поэтому первый if всегда будет иметь значение true.

Вам следует проверить, отличается ли возвращаемое значение от -1. Или, если хотите, вы можете проверить возвращаемое значение, чтобы указать, где python нашел строку:

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"

Позвольте мне объяснить идею кода:

Как сказано в документе для find, он «возвращает самый низкий индекс в строке, где найдена подстрока». Итак, start_index представляет, где в search_string начинается target_string. Затем end_index представляет, где в search_string заканчивается target_string. Итак, если у вас есть start_index в качестве 0 (первая позиция), это в начале строки. Если у вас end_index равно len(target_string), оно продолжается до конца search_string.

0 голосов
/ 02 апреля 2019

Прежде всего, ваш второй 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...