Может ли кто-нибудь подсказать мне правильный способ выполнения итерации в следующем коде

#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. Я добавил ваш комментарий к вопросу. Так как это делает лучший вопрос, чтобы объяснить, в чем проблема. Приятно видеть, что ты это понял!