#python #python-3.x #loops
Вопрос:
Это вопрос из Python Challenge: Двойные буквы
Цель этой задачи-проанализировать строку, чтобы проверить, содержит ли она две одинаковые буквы подряд. Например, строка «здравствуйте» содержит l два раза подряд, в то время как строка «ноно» не содержит двух одинаковых букв подряд.
Определите функцию с именем double_letters, которая принимает один параметр. Параметр представляет собой строку. Ваша функция должна возвращать значение True, если в строке есть две одинаковые буквы, и значение False в противном случае.
Я попробовал код ниже:
def double_letters(word): for i in range(len(word) 1): if word[i] == word[i 1]: return True else: return False double_letters('hello')
Проблема здесь заключается в следующем : когда я возвращаю значение false в конце своей функции, оно отлично работает для истинного оператора (например, «Здравствуйте»), но не работает для ложного оператора (например, «Master»), вместо этого я получаю ошибку: IndexError: строковый индекс вне диапазона
Комментарии:
1. Что пошло не так? Кроме того, почему вы добавляете один:
len(word) 1
?2. Вы должны пройти через петлю внутри своей головы. Он проходит через цикл, сначала i=0. Он проверяет слово[0]==слово[1], это ложь. Таким образом, он выполняет оператор «else». Который возвращает значение false. Но ты хочешь продолжать петлять? Поэтому удалите предложение «else» и в конце вашей функции верните значение false.
3. Это не работает для ложного утверждения таким образом.. Я немного смущен цикличностью..
4. Цикл в порядке, когда вы пишете «вернуть ложь», вы немедленно останавливаете цикл. Вам нужно удалить «еще». Логика такова: если вы обнаружите двойную букву, немедленно верните значение true. Если ты не будешь продолжать искать.
5. Я обнаружил другую ошибку в том, что я здесь делал.. Вместо использования (len(слово) 1) я должен был использовать (len(слово)-1), так как в моем операторе if индекс использовался как индекс 1..
Ответ №1:
Я использовал неправильный диапазон для цикла «для». Так как мой оператор if использует индекс 1, поэтому мой код выдал ошибку как выходящую за пределы диапазона.. Ниже приведен правильный код:
def double_letters(word): for i in range(len(word)-1): if word[i] == word[i 1]: return True return False double_letters('hello')
Комментарии:
1. Я добавил ваш комментарий к вопросу. Так как это делает лучший вопрос, чтобы объяснить, в чем проблема. Приятно видеть, что ты это понял!