#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, если в нем ровно два вхождения подстроки.