функция, которая возвращает ‘True`, если строка содержит ровно два экземпляра подстроки, и `False`, если это не так

#python-3.x #string #function #count

#python-3.x #строка #функция #считается

Вопрос:

Я пытаюсь написать функцию, которая возвращает True , если строка содержит ровно два экземпляра подстроки, и False если это не так.

Я получаю сообщение об ошибке:

 return' outside function
  

Я чувствую, что я очень близок, но просто не могу понять, я был бы признателен, если бы меня указали в правильном направлении.
Следует ли использовать рекурсию?

 s =  ("xeroxes")
exes = str(x)
count = 0
def has_two_X(s):
    count = s.count(exes)
    for exes in s:
        count =  1
       if count ==2:
        return True
       else:
        return False
if __name__ == "__main__":
    print("string has :",count.s(exes))
  

Комментарии:

1. Вы не сохранили содержимое функции с отступом, поэтому return его нет в функции (об этом сообщает ваше сообщение об ошибке). Сделайте отступ во всем коде, который должен быть в функции. Кроме того, я предполагаю, что ваша первая строка должна содержать кавычки xeroxes . Примечание: if boolcondition: return True else: return False может быть упрощено до return boolcondition . И ваш цикл избыточен при вызове count. Таким образом, в этом случае вся функция может свернуться до return s.count(exes) == 2 .

2. Ваш отступ выглядит странно; весь код в функции должен иметь отступ…

3. Вы правы, я отредактировал код и попробовал еще раз, но все равно получаю ту же ошибку

Ответ №1:

Если код должен возвращать True, если существует два или более экземпляров substring , вы можете создать словарь и возвращать True, если значение есть в словаре или нет.

 mydict = {}
for letter in s:
    if letter in mydict:
         return True
    else:
         mydict[letter] = 0
return False #Since there is no substring (two substring can be formed only if it has two same letters in the string)
  

Чтобы точно определить, содержит ли она две подстроки, я бы рекомендовал тот же подход, при котором вы можете поддерживать словарь и количество присутствующих подстрок. Добавьте всю подстроку / количество в словарь, для генерации всех подстрок потребуется O (n ^ 2) и приблизительно O (n ^ 2) памяти хэш-карты.

После построения hashmap вы можете выполнить итерацию по hashmap, чтобы вернуть True, если в нем ровно два вхождения подстроки.