Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс Python
/

Цикл For

Python: Цикл For

С помощью цикла while решают любую задачу перебора элементов, но его отличает многословность. Для while нужно задавать условие остановки и вводить счетчик. Когда циклов немного, то это нормально, но в реальном коде циклы встречаются на каждом шагу. Поэтому управлять условиями вручную утомительно, особенно когда условие остановки очевидно.

Например, если мы хотим перебрать символы в строке, то компьютер сам может понять, когда строка заканчивается. Для таких ситуаций в Python ввели цикл for. Он сам знает, когда нужно остановиться, так как работает только с коллекциями — наборами элементов, которые нужно перебрать.

Строка — это коллекция, так как состоит из набора символов. Остальные виды коллекций подробно изучаются в другом курсе.

Пример:

text = 'code'
for symbol in text:
    print(symbol)

# => c
# => o
# => d
# => e

В коде выше for проходит по каждому символу в строке, записывает его в переменную symbol и вызывает внутренний блок кода, где эта переменная используется. Имя этой переменной может быть любым. Общая структура цикла for выглядит так: for <переменная> in <коллекция>.

Посмотрим, как реализовать функцию переворота строки через цикл for:

def reverse_string(text):
    # Начальное значение
    result = ''
    # char - переменная, в которую записывается текущий символ
    for char in text:
        # Соединяем в обратном порядке
        result = char + result
    # Цикл заканчивается, когда пройдена вся строка
    return result


reverse_string('go!')  # => '!og'

Разберем подробно как отрабатывает цикл в примере выше на каждом шаге итераций:

  1. В первой итерации в цикле result равен пустой строке, char равен первому символу 'g'. Поэтому в result присваивается символ 'g' плюс пустая строка, в итоге сохраняется только символ 'g'
  2. На второй итерации result уже хранит символ 'g', а char равен следующему символу 'o'. В result записывается char + result, то есть 'o' + 'g'
  3. На последней итерации в result хранится строка 'og', а char равен последнему символу '!'. В result теперь сохраняется '!' + 'og'

Теперь посчитаем количество упоминаний символа в строке без учета регистра:

# text - произвольный текст
# char - символ, который нужно учитывать
def chars_count(text, char):
    # Так как ищем сумму, то начальное значение 0
    result = 0
    for current_char in text:
        # приводим все к нижнему регистру,
        # чтобы не зависеть от текущего регистра
        if current_char.lower() == char.lower():
            result += 1
    return result


chars_count('hexlet!', 'e')  # 2
chars_count('hExlet!', 'e')  # 2
chars_count('hExlet!', 'E')  # 2

chars_count('hexlet!', 'a')  # 0

Задание

В одном из предыдущих уроков мы уже написали функцию filter_string(). Напомним, она принимает на вход строку и символ и возвращает новую строку, в которой удалён переданный символ во всех его позициях. На этот раз реализуйте эту функцию с помощью цикла for. Дополнительное условие: регистр исключаемого символа не имеет значения.

Пример вызова:

text = 'If I look forward I win'
filter_string(text, 'i')  # 'f  look forward  wn'
filter_string(text, 'O')  # 'If I lk frward I win'
Коммерческий опыт и Трудоустройство

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном телеграм-сообществе

Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт

  1. Привет, Мир!
  2. Комментарии
  3. Инструкции (Statements)
  4. Как мы проверяем ваши решения
  5. Синтаксические ошибки
  6. Арифметические операции
  7. Операторы
  8. Коммутативная операция
  9. Композиция операций
  10. Приоритет
  11. Числа с плавающей точкой
  12. Линтер
  13. Кавычки
  14. Экранированные последовательности
  15. Конкатенация
  16. Кодировка
  17. Что такое переменная
  18. Изменение переменной
  19. Выбор имени переменной
  20. Ошибки при работе с переменными
  21. Выражения в определениях
  22. Переменные и конкатенация
  23. Именование переменных
  24. Магические числа
  25. Константы
  26. Интерполяция
  27. Извлечение символов из строки
  28. Срезы строк
  29. Multi-line строки
  30. Типы данных
  31. Сильная (или Строгая) типизация
  32. Неизменяемость примитивных типов
  33. Явное преобразование типов
  34. Функции и их вызов
  35. Сигнатура функции
  36. Аргументы по умолчанию
  37. Вызов функции — выражение
  38. Функции с переменным числом параметров
  39. Детерминированность
  40. Стандартная библиотека
  41. Объекты
  42. Неизменяемость
  43. Методы как выражения
  44. Цепочка вызовов
  45. Создание (определение) функций
  46. Возврат значений
  47. Параметры функций
  48. Необязательные параметры функций
  49. Именованные аргументы
  50. Аннотации типов
  51. Логический тип
  52. Предикаты
  53. Комбинирование операций и функций
  54. Логические операторы
  55. Отрицание
  56. Результат логических выражений
  57. Условная конструкция (if)
  58. Условная конструкция else
  59. Конструкция else + if = elif
  60. Тернарный оператор
  61. Оператор Match
  62. Цикл While
  63. Агрегация данных (Числа)
  64. Агрегация данных (Строки)
  65. Обход строк
  66. Условия внутри тела цикла
  67. Формирование строк в циклах
  68. Пограничные случаи
  69. Синтаксический сахар
  70. Возврат из циклов
  71. Цикл For
  72. Цикл for и функция range
/
Программирование
/
Курс Python
/

Цикл For

Python: Цикл For

С помощью цикла while решают любую задачу перебора элементов, но его отличает многословность. Для while нужно задавать условие остановки и вводить счетчик. Когда циклов немного, то это нормально, но в реальном коде циклы встречаются на каждом шагу. Поэтому управлять условиями вручную утомительно, особенно когда условие остановки очевидно.

Например, если мы хотим перебрать символы в строке, то компьютер сам может понять, когда строка заканчивается. Для таких ситуаций в Python ввели цикл for. Он сам знает, когда нужно остановиться, так как работает только с коллекциями — наборами элементов, которые нужно перебрать.

Строка — это коллекция, так как состоит из набора символов. Остальные виды коллекций подробно изучаются в другом курсе.

Пример:

text = 'code'
for symbol in text:
    print(symbol)

# => c
# => o
# => d
# => e

В коде выше for проходит по каждому символу в строке, записывает его в переменную symbol и вызывает внутренний блок кода, где эта переменная используется. Имя этой переменной может быть любым. Общая структура цикла for выглядит так: for <переменная> in <коллекция>.

Посмотрим, как реализовать функцию переворота строки через цикл for:

def reverse_string(text):
    # Начальное значение
    result = ''
    # char - переменная, в которую записывается текущий символ
    for char in text:
        # Соединяем в обратном порядке
        result = char + result
    # Цикл заканчивается, когда пройдена вся строка
    return result


reverse_string('go!')  # => '!og'

Разберем подробно как отрабатывает цикл в примере выше на каждом шаге итераций:

  1. В первой итерации в цикле result равен пустой строке, char равен первому символу 'g'. Поэтому в result присваивается символ 'g' плюс пустая строка, в итоге сохраняется только символ 'g'
  2. На второй итерации result уже хранит символ 'g', а char равен следующему символу 'o'. В result записывается char + result, то есть 'o' + 'g'
  3. На последней итерации в result хранится строка 'og', а char равен последнему символу '!'. В result теперь сохраняется '!' + 'og'

Теперь посчитаем количество упоминаний символа в строке без учета регистра:

# text - произвольный текст
# char - символ, который нужно учитывать
def chars_count(text, char):
    # Так как ищем сумму, то начальное значение 0
    result = 0
    for current_char in text:
        # приводим все к нижнему регистру,
        # чтобы не зависеть от текущего регистра
        if current_char.lower() == char.lower():
            result += 1
    return result


chars_count('hexlet!', 'e')  # 2
chars_count('hExlet!', 'e')  # 2
chars_count('hExlet!', 'E')  # 2

chars_count('hexlet!', 'a')  # 0

Задание

В одном из предыдущих уроков мы уже написали функцию filter_string(). Напомним, она принимает на вход строку и символ и возвращает новую строку, в которой удалён переданный символ во всех его позициях. На этот раз реализуйте эту функцию с помощью цикла for. Дополнительное условие: регистр исключаемого символа не имеет значения.

Пример вызова:

text = 'If I look forward I win'
filter_string(text, 'i')  # 'f  look forward  wn'
filter_string(text, 'O')  # 'If I lk frward I win'
Коммерческий опыт и Трудоустройство

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
← ПредыдущийСледующий →
Loading...
← ПредыдущийСледующий →
← ПредыдущийСледующий →

Ваше упражнение проверяется по этим тестам

from index import filter_string


def test1():
    text = "If I look forward I am win"
    assert filter_string(text, "z") == "If I look forward I am win"
    assert filter_string(text, "I") == "f  look forward  am wn"
    assert filter_string("zz zorro", "z") == " orro"
← ПредыдущийСледующий →

Решение учителя откроется через:

20:00

waiting_clock
← ПредыдущийСледующий →