Циклы в программировании. Цикл while
Циклы являются такой же важной частью структурного программирования, как условные операторы. С помощью циклов можно организовать повторение выполнения участков кода. Потребность в этом возникает довольно часто. Например, пользователь последовательно вводит числа, и каждое из них требуется добавлять к общей сумме. Или нужно вывести на экран квадраты ряда натуральных чисел и тому подобные задачи.
Цикл while
«While» переводится с английского как «пока». Но не в смысле «до свидания», а в смысле «пока имеем это, делаем то».
Можно сказать, while является универсальным циклом. Он присутствует во всех языках, поддерживающих структурное программирование, в том числе в Python. Его синтаксис обобщенно для всех языков можно выразить так:
while логическое_выражение
Это похоже на условный оператор if . Однако в случае циклических операторов их тела могут выполняться далеко не один раз. В случае if , если логическое выражение в заголовке возвращает истину, то тело выполняется единожды. После этого поток выполнения программы возвращается в основную ветку и выполняет следующие выражения, расположенные ниже всей конструкции условного оператора.
В случае while , после того как его тело выполнено, поток возвращается к заголовку цикла и снова проверяет условие. Если логическое выражение возвращает истину, то тело снова выполняется. Потом снова возвращаемся к заголовку и так далее.
Цикл завершает свою работу только тогда, когда логическое выражение в заголовке возвращает ложь, то есть условие выполнения цикла больше не соблюдается. После этого поток выполнения перемещается к выражениям, расположенным ниже всего цикла. Говорят, «происходит выход из цикла».
Рассмотрите блок-схему цикла while .

На ней ярко-голубыми прямоугольниками обозначена основная ветка программы, ромбом – заголовок цикла с логическим выражением, бирюзовым прямоугольником – тело цикла.
С циклом while возможны две исключительные ситуации:
- Если при первом заходе в цикл логическое выражение возвращает False , то тело цикла не выполняется ни разу. Эту ситуацию можно считать нормальной, так как при определенных условиях логика программы может предполагать отсутствие необходимости в выполнении выражений тела цикла.
- Если логическое выражение в заголовке while никогда не возвращает False , а всегда остается равным True , то цикл никогда не завершится, если только в его теле нет оператора принудительного выхода из цикла ( break ) или вызовов функций выхода из программы – quit() , exit() в случае Python. Если цикл повторяется и повторяется бесконечное количество раз, то в программе происходит зацикливание. В это время она зависает и самостоятельно завершиться не может.
Вспомним наш пример из урока про исключения. Пользователь должен ввести целое число. Поскольку функция input() возвращает строку, то программный код должен преобразовать введенное к целочисленному типу с помощью функции int() . Однако, если были введены символы, не являющиеся цифрами, то возникает исключение ValueError , которое обрабатывается веткой except . На этом программа завершается.
Другими словами, если бы программа предполагала дальнейшие действия с числом (например, проверку на четность), а она его не получила, то единственное, что программа могла сделать, это закончить свою работу досрочно.
Но ведь можно просить и просить пользователя корректно вести число, пока он его не введет. Вот как может выглядеть реализующий это код:
n = input("Введите целое число: ") while type(n) != int: try: n = int(n) except ValueError: print("Неправильно ввели!") n = input("Введите целое число: ") if n % 2 == 0: print("Четное") else: print("Нечетное")
Примечание 1. Не забываем, в языке программирования Python в конце заголовков сложных инструкций ставится двоеточие.
Примечание 2. В выражении type(n) != int с помощью функции type() проверяется тип переменной n . Если он не равен int , то есть значение n не является целым числом, а является в данном случае строкой, то выражение возвращает истину. Если же тип n равен int , то данное логическое выражение возвращает ложь.
Примечание 3. Оператор % в языке Python используется для нахождения остатка от деления. Так, если число четное, то оно без остатка делится на 2, то есть остаток будет равен нулю. Если число нечетное, то остаток будет равен единице.
Проследим алгоритм выполнения этого кода. Пользователь вводит данные, они имеют строковый тип и присваиваются переменной n . В заголовке while проверяется тип n . При первом входе в цикл тип n всегда строковый, то есть он не равен int . Следовательно, логическое выражение возвращает истину, что позволяет зайти в тело цикла.
Здесь в ветке try совершается попытка преобразования строки к целочисленному типу. Если она была удачной, то ветка except пропускается, и поток выполнения снова возвращается к заголовку while .
Теперь n связана с целым числом, следовательно, ее тип int , который не может быть не равен int . Он ему равен. Таким образом логическое выражение type(n) != int возвращает False , и весь цикл завершает свою работу. Далее поток выполнения переходит к оператору if-else, находящемуся в основной ветке программы. Здесь могло бы находиться что угодно, не обязательно условный оператор.
Вернемся назад. Если в теле try попытка преобразования к числу была неудачной, и было выброшено исключение ValueError , то поток выполнения программы отправляется в ветку except и выполняет находящиеся здесь выражения, последнее из которых просит пользователя снова ввести данные. Переменная n теперь имеет новое значение.
После завершения except снова проверяется логическое выражение в заголовке цикла. Оно даст True , так как значение n по-прежнему строка.
Выход из цикла возможен только тогда, когда значение n будет успешно конвертировано в число.
Рассмотрим следующий пример:
total = 100 i = 0 while i 5: n = int(input()) total = total - n i = i + 1 print("Осталось", total)
Сколько раз «прокрутится» цикл в этой программе, то есть сколько итераций он сделает? Ответ: 5.
- Сначала переменная i равна 0. В заголовке цикла проверяется условие i < 5 , и оно истинно. Тело цикла выполняется. В нем меняется значение i , путем добавления к нему единицы.
- Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.
- Два меньше пяти. Тело цикла выполняется третий раз. Значение i становится равным трем.
- Три меньше пяти. На этой итерации i присваивается 4.
- Четыре по прежнему меньше пяти. К i добавляется единица, и теперь ее значение равно пяти.
«Смысловая нагрузка» данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for , который так и называется: «цикл со счетчиком». Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for .
В языке Python тоже есть цикл for . Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.
Для while наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:
total = 100 while total > 0: n = int(input()) total = total - n print("Ресурс исчерпан")
Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.
Самое главное для цикла while – чтобы в его теле происходили изменения значений переменных, которые проверяются в его заголовке, и чтобы хоть когда-нибудь наступил случай, когда логическое выражение в заголовке возвращает False . Иначе произойдет зацикливание.
Примечание 1. Не обязательно в выражениях total = total — n и i = i + 1 повторять одну и ту же переменную. В Python допустим сокращенный способ записи подобных выражений: total -= n и i += 1 .
Примечание 2. При использовании счетчика он не обязательно должен увеличиваться на единицу, а может изменяться в любую сторону на любое значение. Например, если надо вывести числа кратные пяти от 100 до 0, то изменение счетчика будет таким i = i — 5 , или i -= 5 .
Примечание 3. Для счетчика не обязательно использовать переменную с идентификатором i . Можно назвать переменную-счетчик как угодно. Однако так принято в программировании, что счетчики обозначают именами i и j (иногда одновременно требуются два счетчика).
Практическая работа
- Измените последний код из урока так, чтобы переменная total не могла уйти в минус. Например, после предыдущих вычитаний ее значение стало равным 25. Пользователь вводит число 30. Однако программа не выполняет вычитание, а выводит сообщение о недопустимости операции, после чего осуществляет выход из цикла.
- Используя цикл while , выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как ** . Фрагмент вывода:
. 32 64 128 256 512 1024 .
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Как подсчитать количество итераций цикла за 1 секунду?
Приветствую, появилась довольно тривиальная задача, но уже полчаса ломаю голову над ее решением.
Мне нужно подсчитать сколько раз проходит цикл за 1 секунду, проще говоря количество итераций в секунду, как это можно реализовать?
- Вопрос задан более трёх лет назад
- 1235 просмотров
Комментировать
Решения вопроса 1

Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); int iterationCounter = 0; while(true)< //todo iterationCounter++; if(stopWatch.ElapsedMilliseconds >= 1000) < Console.WriteLine("iterations "+iterationCounter); break; >> stopWatch.Stop();
P.S. Ну это не идеально за 1 секунду, так как одна секунда может истечь в момент обработки вашего кода, тогда если не нужно считать такую итерацию, от счетчика отнимите 1 если ElapsedMilliseconds > 1000
Ответ написан более трёх лет назад

Griboks @Griboks Куратор тега C#
Лучше продлить время замера до нескольких минут, а потом разделить на время.
Ответы на вопрос 2

Самый лучший программист
var sw = new Stopwatch(); sw.Start(); sw.Stop(); mssec = sw.ElapsedMilliseconds;
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
QA automation
Запустите цикл на 1000 раз(для примера), замерьте время(N).
Время переведите в секунды(если замеряли в милисекундах) и 1000\N = колличество итераций за секунду.
Ответ написан более трёх лет назад
RoxxelRoxx @RoxxelRoxx Автор вопроса
А если количество итераций цикла не постоянное? Т.е первый раз прошло 20 раз в секунду, а во второй уже 10, при том что цикл бесконечный
А это уже другой вопрос, тогда вам необходимо проверять алгоритм на одинаковых данных, либо бо же вычислять среднее арифметическое.
Если вы имели ввиду — вывод колличества итераций на каждую секунду, вам надо запускать таймер и каждую секунду обнулять счетчик, добавляя результаты например в лист, а потом уже, его читать.
Отслеживание количества итераций цикла

Проблема следующая, пытаюсь посчитать кол-во подходящих условий в цикле, то есть здесь ищутся простые числа в диапазоне от 1 до n, мне нужно посчитать сколько он их таких нашел, пробую с помощью переменной count, не получается. Как решить?
Лучшие ответы ( 1 )
| Здесь вы можете заказать любую студенческую или школьную работу. |
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Функция которая возвращает количество итераций цикла
Написать функцию, которая для заданного в качестве параметра числа возвращает количество итераций.
Количество итераций цикла с одинаковым значением кратного
Здраствуйте. Подскажите пожалуйста как подсчитать количество итераций с одинаковым значением.

Формула подсчета количества итераций цикла for
Доброго времени суток Помогите ответом/советом/уч. материалом Пусть, for( int i = 1; i <= 10;.
Сортировка выбором, уменьшение количества итераций внешнего цикла
Всем Привет! Есть функция которая делает сортировку методом выбора, всё хорошо работает, но как.
Регистрация: 03.12.2018
Сообщений: 13

Сообщение было отмечено soberfrog как решение
Решение
Сообщение от soberfrog 
1 2 3 4 5 6 7 8 9 10 11 12 13 14
n = int ( input ("Укажите, до какого числа проверять простые числа: ")) for a in range (2, n+1): count = 0 prime = True for i in range(2, a): if (a % i) == 0: prime = False count += 1 break if prime: print("Этап", count, "Простое число:", a)
Проблема следующая, пытаюсь посчитать кол-во подходящих условий в цикле, то есть здесь ищутся простые числа в диапазоне от 1 до n, мне нужно посчитать сколько он их таких нашел, пробую с помощью переменной count, не получается. Как решить?
Смотри:
Этот код подсчитывает этапы, когда число простое:
1 2 3 4 5 6 7 8 9 10 11
n = int(input("Укажите, до какого числа проверять простые числа: ")) count = 0 for a in range(2, n + 1): prime = True for i in range(2, a): if (a % i) == 0: prime = False break if prime: count += 1 print("Этап", count, "Простое число:", a)
Этот же код, подсчитывает, каждую итерацию цикла:
1 2 3 4 5 6 7 8 9 10 11 12
n = int(input("Укажите, до какого числа проверять простые числа: ")) count = 0 for a in range(2, n + 1): prime = True count += 1 for i in range(2, a): if (a % i) == 0: prime = False break if prime: print("Этап", count, "Простое число:", a)
Ошибка была вот здесь:
1 2 3 4 5
n = int ( input ("Укажите, до какого числа проверять простые числа: ")) for a in range (2, n+1): count = 0 .
Каждую итерацию внешнего цикла (возможно тупо сказано) count обнуляется
Надо было написать вот так:
1 2 3 4
n = int ( input ("Укажите, до какого числа проверять простые числа: ")) count = 0 for a in range (2, n+1): .
Регистрация: 03.12.2015
Сообщений: 126
Запустил код, вот что вышло, он так же не по порядку считает
а этот код наоборот, все как надо делает, вы немного напутали или я не так понял
Смотри:
Этот код подсчитывает этапы, когда число простое:
1 2 3 4 5 6 7 8 9 10 11
n = int(input("Укажите, до какого числа проверять простые числа: ")) count = 0 for a in range(2, n + 1): prime = True for i in range(2, a): if (a % i) == 0: prime = False break if prime: count += 1 print("Этап", count, "Простое число:", a)
Регистрация: 03.12.2018
Сообщений: 13
soberfrog, а, я понял, тебе нужно было подсчитать кол-во простых чисел.
Регистрация: 03.12.2015
Сообщений: 126
Все разобрался, спасибо огромное) Второй кусок вашего кода помог)))
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Баг цикла в подсчете количества итераций для палиндромов
Хочу написать софтину которая будет считать количество итераций для палиндромов Написал и все.
Выход из цикла после выполнения определённого количества итераций
😡 start "" "URL" goto x Как сделать, что б цыкл был не вечный, а кончался, к примеру, на 20

Отслеживание количества запросов
Здравствуйте! Есть многопоточный сервер. Мне нужно в реальном времени видеть сколько запросов он.
Количество итераций цикла
Привет, не могу разобраться как вывести количество итераций цикла if. Пробую через сделать это.
Отслеживание количества символов в textBox
В textBox1 у меня есть такие строчки this->textBox1->MaxLength = 30; this->textBox1->Text =.
Отслеживание количества строк в RichTextBox
Приветствую всех, кто зашел в эту тему. Разрабатываю читалку fb2. Столкнулся с такой проблемой -.
Или воспользуйтесь поиском по форуму:
Синтаксис и возможности цикла for Python
Циклы python — for и while представляют собой операторы языка программирования, то есть операторы итерации, которые позволяют повторять код определенное количество раз.
Синтаксис цикла For
Как уже упоминалось ранее, цикл for в Python является итератором, основанным на цикле. Он проходит по элементам list и tuple, строкам, ключам словаря и другим итерируемым объектам.
В Python цикл начинается с ключевого слова for , за которым следует произвольное имя переменной, которое будет хранить значения следующего объекта последовательности. Общий синтаксис for. in в python выглядит следующим образом:
for in : else:
Элементы «последовательности» перебираются один за другим «переменной» цикла; если быть точным, переменная указывает на элементы. Для каждого элемента выполняется «действие».
Пример простого цикла for в Python:
>>> languages = ["C", "C++", "Perl", "Python"] >>> for x in languages: . print(x) . C C++ Perl Python >>>Блок else является особенным; в то время как программист, работающий на Perl знаком с ним, это неизвестная конструкция для программистов, которые работают на C и C++. Семантически он работает точно так же, как и в цикле while .
Он будет выполнен только в том случае, если цикл не был «остановлен» оператором break . Таким образом, он будет выполнен только после того, как все элементы последовательности будут пройдены.
Оператор прерывания в python — break
Если в программе цикл for должен быть прерван оператором break , цикл будет завершен, и поток программы будет продолжен без выполнения действий из else .
Обычно фразы break в pyton связаны с условными операторами.
edibles = ["отбивные", "пельмени", "яйца", "орехи"] for food in edibles: if food == "пельмени": print("Я не ем пельмени!") break print("Отлично, вкусные " + food) else: print("Хорошо, что не было пельменей!") print("Ужин окончен.")Если мы запустим этот код, получим следующий результат:
Отлично, вкусные отбивные Я не ем пельмени! Ужин окончен.Удалим «пельмени» из нашего списка еды и получим следующее:
Отлично, вкусные отбивные Отлично, вкусные яйца Отлично, вкусные орехи Хорошо, что не было пельменей! Ужин окончен.Оператор пропуска python — continue
Предположим, нам «пельмени» нам нужно просто пропустить и продолжить прием пищи. Тогда нужно использовать оператор continue , для перехода к следующему элементу.
В следующем маленьком скрипте python мы используем continue , чтобы продолжить, итерацию по списку, когда мы сталкиваемся с пельменями.
edibles = ["отбивные", "пельмени", "яйца", "орехи"] for food in edibles: if food == "пельмени": print("Я не ем пельмени!") continue print("Отлично, вкусные " + food) else: print("Ненавижу пельмени!") print("Ужин окончен.")Результат будет следующим:
Отлично, вкусные отбивные Я не ем пельмени! Отлично, вкусные яйца Отлично, вкусные орехи Ненавижу пельмени! Ужин окончен.Итерация по спискам с функцией range()
Если вам нужно получить доступ к индексам списка, не очевидно как использовать цикл for для этой задачи. Мы можем получить доступ ко всем элементам, но индекс элемента остается недоступным. Есть способ получить доступ как к индексу элемента, так и к самому элементу. Для этого используйте функцию range() в сочетании с функцией длины len() :