Содержание

Как работает цикл while в python, примеры ~ PythonRu

Из этого материала вы узнаете, что такое циклы while, как они могут становиться бесконечными, как использовать инструкцию else в цикле while и как прерывать исполнение цикла.

Управление потоком инструкций: цикл While в Python

Как и другие языки программирования Python включает несколько инструкций для управления потоком. Одна из таких — if else. Еще одна — циклы. Циклы используются в тех случаях, когда нужно повторить блок кода определенное количество раз.

Что такое цикл while в Python?

Цикл while используется в Python для неоднократного исполнения определенной инструкции до тех пор, пока заданное условие остается истинным. Этот цикл позволяет программе перебирать блок кода.

while test_expression:
    body of while

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

Рассмотрим пример, чтобы лучше понять.

a = 1
while a 

Вывод:

Цикл выполнился 1 раз
Цикл выполнился 2 раз
Цикл выполнился 3 раз
Цикл выполнился 4 раз
Цикл выполнился 5 раз
Цикл выполнился 6 раз
Цикл выполнился 7 раз
Цикл выполнился 8 раз
Цикл выполнился 9 раз
Цикл окончен

Бесконечный цикл while в Python

Бесконечный цикл while — это цикл, в котором условие никогда не становится ложным. Это значит, что тело исполняется снова и снова, а цикл никогда не заканчивается.

Следующий пример — бесконечный цикл:

a = 1
while a==1:
    b = input('Как тебя зовут?')
    print('Привет', b, ', Добро пожаловать')

Если запустить этот код, то программа войдет в бесконечный цикл и будет снова и снова спрашивать имена. Цикл не остановится до тех пор, пока не нажать Ctrl + C.

Else в цикле while

В Python с циклами while также можно использовать инструкцию else. В этом случае блок в else исполняется, когда условие цикла становится ложным.

a = 1
while a 

Этот пример демонстрирует принцип работы

else в цикле while.

Вывод:

условие верно
условие верно
условие верно
условие верно
условие неверно

Программа исполняет код цикла while до тех, пока условие истинно, то есть пока значение a меньше 5. Поскольку начальное значение a равно 1, а с каждым циклом оно увеличивается на 1, условие станет ложным, когда программа доберется до четвертой итерации — в этот момент значение a изменится с 4 до 5. Программа проверит условие еще раз, убедится, что оно ложно и исполнит блок else, отобразив «условие неверно».

Прерывания цикла while в Python

В Python есть два ключевых слова, с помощью которых можно преждевременно остановить итерацию цикла.

  1. Break — ключевое слово break прерывает цикл и передает управление в конец цикла
    a = 1
    while a 
  2. Continue — ключевое слово continue прерывает текущую итерацию и передает управление в начало цикла, после чего условие снова проверяется. Если оно истинно, исполняется следующая итерация.
a = 1
while a 

что это такое, как работает, примеры

Цикл while в Python

В прошлой статье мы изучали цикл for – он используется в тех случаях, когда

заранее известно количество итераций, совершаемых в цикле. Число исполнений цикла for определяется функцией range() или размером коллекции. Если диапазон значений не известен заранее, необходимо использовать другой цикл – while: он выполняется, пока не наступит определенное событие (или не выполнится необходимое условие). По этой причине цикл while называют условным. Вот пример простейшего цикла while – он выполняется, пока пользователь не введет 0:

n = int(input())
while n != 0:
    print(n + 5)
    n = int(input())

    

Цикл while также часто называют

бесконечным, поскольку он может выполняться до тех пор, пока пользователь не остановит его нажатием определенной клавиши. Бесконечные циклы можно создавать намеренно – для выполнения фонового скрипта, игры, прикладной программы. Но иногда цикл while может стать бесконечным из-за ошибки. Например, если в приведенном выше коде не указать ввод новой переменной n = int(input()) в теле цикла, while будет бесконечно выводить одно и то же значение, пока пользователь не остановит выполнение программы нажатием Ctrl + C.

Управление бесконечным циклом while в Питоне

Самый простой способ управления бесконечным циклом – использование оператора break. В приведенном ниже коде список lst генерируется случайным образом, и до начала цикла его длина неизвестна. Однако выполнение цикла можно оставить, как только список опустеет в результате многократного выполнения операции pop():

import random
lst = [i for i in range(random.randint(5, 500))]
while True:
    if not lst:
        break
    print(lst. pop())

    

Если выполнение цикла не остановить сразу же, как только список опустеет, появится ошибка:

IndexError: pop from empty list
    

Оператор break также помогает сократить количество итераций и прекратить выполнение программы, как только нужное решение найдено. Например, таким образом можно найти наименьший делитель числа n, отличный от 1:

n = int(input())
i = 2
while True:
    if n % i == 0:
        break
    i += 1
print(i)

    

Помимо break, управлять бесконечным циклом можно с помощью флагов (сигнальных меток). В приведенном ниже примере программа бесконечно запрашивает у пользователя ввод любого слова, пока пользователь не введет

exit. Это событие меняет статус цикла на False, и работа программы завершается:

text = 'Введите любое слово: '
text += '\nИли введите exit для выхода: '
active = True
while active:
    message = input(text)
    if message == 'exit':
        active = False
    else: 
        print(message)

    

Пропуск итераций в цикле while

Оператор continue можно использовать для пропуска операций, если элементы не соответствуют заданным критериям.

Этот код работает, пока не будет сформирован список из 5 элементов – при этом в список не включаются числа в диапазоне между 90 и 120, а также число 50:

sp = []
while len(sp) < 5:
    num = int(input())
    if num == 50 or 90 <= num <= 120:
        continue
    sp.append(num)  
print(sp)

    

Если пользователь введет набор цифр 45 50 121 119 95 105 3 4 7, в список будут добавлены только числа, соответствующие критериям:

[45, 121, 3, 4, 7]
    

Особенности цикла while

1. В цикле while можно использовать опциональный параметр

else. В этом примере процедура pop() выполняется, пока список не опустеет, после чего выводится сообщение Список пуст:

import random
lst = [i for i in range(random.randint(5, 500))]
while len(lst) > 1:
    print(lst.pop())
else:
    print('Список пуст')

    

2. В цикле while можно использовать любое количество условий и условных операторов and, or, иnot:

n = int(input())
while True:
    if n == 0:
        break
    elif n > 50 or n <= -50:
        break
    elif n % 2 == 0:
        break
    print(n / 5)
    n = int(input())

    

3. Цикл while может быть вложенным. Этот код выводит простые числа из диапазона от 2 до 100:

i = 2
while(i < 100):
   j = 2
   while j <= i / j:
      if not i % j:
          break
      j = j + 1
   if j > i / j:
       print(f'{i} - простое число')
   i = i + 1

    

4. В качестве вложенных циклов while могут включать в себя циклы for. Этот код, к примеру, будет бесконечно печатать цифры в диапазоне от 0 до 5:

while True:
    for i in range(5):
        print(i)

    

5. Любой цикл for можно заменить циклом while, но обратное возможно только в том случае, когда количество итераций можно определить до начала цикла. К примеру, эти циклы while и for равнозначны – оба печатают цифры от 0 до 9:

i = 0
while i < 10:
    print(i)
    i += 1
for i in range(10):
    print(i)

    

А этот цикл while заменить циклом for невозможно – программа будет бесконечно возводить в квадрат все введенные пользователем числа, пока не получит

0:

n = int(input())
while True:
    if n == 0:
        break
    print(n ** 2)
    n = int(input())

    

Практика

Задание 1

Напишите программу, которая принимает на вход целые числа и вычисляет их сумму, пока пользователь не введет 0.

Пример ввода:

4
5
6
0

    

Вывод:

15
    

Решение:

summa = 0
while True:
    n = int(input())
    summa += n
    if n == 0:
        break
print(summa)

    

Задание 2

Напишите программу, которая получает от пользователя число n > 100, и вычисляет (без использования методов строк) произведение цифр, из которых n состоит.

Пример ввода:

335
    

Вывод:

45
    

Решение:

n = int(input())
prod = 1
while n:
    prod *= n % 10
    n //= 10
print(prod)

    

Задание 3

Напишите программу, которая получает на вход два числа a и b, и находит наименьшее число c, которое без остатка делится на a и b.

Пример ввода:

7
12
    

Вывод:

84
    

Решение:

a, b = int(input()), int(input())
c = a
while c % b:
    c += a
print(c)

    

Задание 4

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

Пример ввода:

о
бойся
Бармаглота
сын
он
так
свиреп
и
дик
а
в глуще
рымит

    

Вывод:

бойся Бармаглота сын так свиреп дик в глуще рымит
    

Решение:

st = ''
while len(st) < 50:
    word = input()
    if word[0] in 'аиеёоуыэюя':
        continue
    st += ' ' + word
print(st)

    

Задание 5

Напишите программу для конвертации числа из десятичного системы в двоичную без использования функции bin().

Пример ввода:

25
    

Вывод:

11001
    

Решение:

n = int(input())
result = ''
while n > 0:
    result = str(n % 2) + result
    n = n // 2
print(result)

    

Задание 6

Напишите программу, которая получает на вход число и без использования строковых методов переставляет цифры в обратном порядке.

Пример ввода:

176435
    

Вывод:

534671
    

Решение:

n = int(input())
rev = 0
while n!= 0:
    r = n % 10
    rev = rev * 10 + r
    n = n // 10
print(rev)

    

Задание 7

Напишите программу для вычисления факториала числа n без использования функции math.factorial().

Пример ввода:

7
    

Вывод:

5040
    

Решение:

n = int(input())
fact = 1
while n > 1:
    fact *= n 
    n -= 1
print(fact)

    

Задание 8

Напишите программу, которая получает от пользователя число n и определяет, является ли оно простым, или у него есть делители, кроме 1 и самого себя.

Пример ввода:

60
    

Вывод:

60 делится на 2
60 делится на 3
60 делится на 4
60 делится на 5
60 делится на 6
60 делится на 10
60 делится на 12
60 делится на 15
60 делится на 20
60 делится на 30
Таким образом, 60 не является простым числом

    

Решение:

n = int(input())
flag = False
i = 2
while i < n:
    if n % i ==0:
        flag = True
        print(f'{n} делится на {i}')
    i += 1   
if flag:
    print(f'Таким образом, {n} не является простым числом')
else:
    print(f'{n} - простое число')

    

Задание 9

Напишите программу, использующую вложенный цикл while для вывода треугольника размером n x n х n, состоящего из символов*.

Пример ввода:

6
    

Вывод:

*
**
***
****
*****
******

    

Решение:

n = int(input())
i, j = 0, 0
while i < n:
    while j <= i:
        print('*', end='')
        j += 1
    j = 0
    i += 1
    print('')

    

Задание 10

Напишите программу для запоминания английских названий месяцев:

1. Русские названия месяцев выводятся в случайном порядке с помощью метода random.shuffle().

2. Пользователь получает три попытки для написания правильного названия на английском.

3. После трех неверных попыток программа переходит к другому слову.

Пример ввода:

Месяц март по-английски называется: march
Месяц январь по-английски называется: January
Месяц август по-английски называется: august
Месяц май по-английски называется: may
Месяц апрель по-английски называется: aprile
Неверно! Осталось попыток: 2
Месяц апрель по-английски называется: aprill
Неверно! Осталось попыток: 1
Месяц апрель по-английски называется: appril
Неверно! Осталось попыток: 0
Попытки исчерпаны!
Месяц июль по-английски называется: july
Месяц сентябрь по-английски называется: september
Месяц июнь по-английски называется: june
Месяц октябрь по-английски называется: october
Месяц ноябрь по-английски называется: november
Месяц декабрь по-английски называется: december
Месяц февраль по-английски называется: february

    

Вывод:

Конец игры
Количество правильных ответов: 11
Число ошибок: 3

    

Решение:

import random
correct, wrong, attempts = 0, 0, 3
months = {'январь': 'January', 'февраль': 'February', 'март': 'March',
          'апрель': 'April', 'май': 'May', 'июнь': 'June',
           'июль': 'July', 'август': 'August', 'сентябрь': 'September',
          'октябрь': 'October', 'ноябрь': 'November', 'декабрь': 'December'}
rand_keys = list(months. keys())
random.shuffle(rand_keys)
for key in rand_keys:
    counter = 0
    while counter < attempts:
        spelling = input(f'Месяц {key} по-английски называется: ')
        if spelling.title() == months[key]:
            correct += 1
            break
        else:
            counter += 1
            wrong += 1
            print(f'Неверно! Осталось попыток: {attempts - counter}')
    else:
        print(f'Попытки исчерпаны!')
        
print('Конец игры')
print(f'Количество правильных ответов: {correct}')
print(f'Число ошибок: {wrong}')

    

Подведем итоги

Цикл while используют в случаях, когда число итераций невозможно оценить заранее. Во всех остальных случаях лучше применять цикл for. Чтобы цикл while случайно не превратился в бесконечный, стоит продумать все события и условия, которые должны приводить к своевременному прерыванию программы.

В следующей статье приступим к изучению функций.

***

Содержание самоучителя

  1. Особенности, сферы применения, установка, онлайн IDE
  2. Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
  3. Типы данных: преобразование и базовые операции
  4. Методы работы со строками
  5. Методы работы со списками и списковыми включениями
  6. Методы работы со словарями и генераторами словарей
  7. Методы работы с кортежами
  8. Методы работы со множествами
  9. Особенности цикла for
  10. Условный цикл while
  11. Функции с позиционными и именованными аргументами
  12. Анонимные функции
  13. Рекурсивные функции
  14. Функции высшего порядка, замыкания и декораторы
  15. Методы работы с файлами и файловой системой
  16. Регулярные выражения
  17. Основы скрапинга и парсинга
  18. Основы ООП: инкапсуляция и наследование

Цикл Do While — Основы программирования

Кеннет Лерой Басби и Дэйв Брауншвейг

Обзор

Цикл do while — это оператор потока управления, который выполняет блок кода хотя бы один раз, а затем повторно выполняет этот блок или нет, в зависимости от заданного логического условия в конце блока. [1]

Некоторые языки могут использовать другое соглашение об именах для этого типа цикла. Например, язык Паскаль имеет повторяется до цикла , который продолжает работать до тех пор, пока управляющее выражение не станет истинным (и затем завершается), тогда как цикл «пока» выполняется, пока управляющее выражение истинно (и завершается, когда выражение становится ложным). [2]

Обсуждение

Введение в циклы Test After

В категории итерации (или повторения) управляющих структур есть два часто используемых цикла test after. Они таковы: делай пока и повторяй до тех пор, пока. Этот модуль охватывает оба.

Общие сведения об итерации – делать пока

Концепция итерации связана с возможным желанием повторить действие. Как и все управляющие структуры, мы задаем вопрос, чтобы контролировать выполнение цикла. Термин «петля» происходит от кругового циклического движения, которое происходит при использовании блок-схемы. Базовая форма цикла do while выглядит следующим образом:

 сделать
    некоторые заявления или действия
    некоторые заявления или действия
    некоторые заявления или действия
    обновить флаг
пока ответ на вопрос верный 

В большинстве языков программирования вопрос (называемый проверочным выражением) представляет собой логическое выражение. Тип данных Boolean имеет два значения — true и false. Давайте перепишем структуру, чтобы учесть это:

 сделать
    некоторые заявления или действия
    некоторые заявления или действия
    некоторые заявления или действия
    обновить флаг
пока выражение верно 

В структуре управления do while есть три атрибута правильно работающего цикла. Их:

  • Действие или действия
  • Обновление флага
  • Тестовое выражение

Английская формулировка звучит так: «Вы делаете действие, пока выражение верно». Это зацикливание на истине. Когда тестовое выражение ложно, вы останавливаете цикл и переходите к следующему элементу программы. Обратите внимание, поскольку это тест после цикла, действие всегда будет выполняться хотя бы один раз . Это называется тест за циклом, потому что тест следует за действием. Его также иногда называют пост-тестовым циклом, что означает, что тест представляет собой пост (или «после» на латыни) действие и обновление.

Общие сведения об итерации — повторять до

Концепция итерации связана с возможным желанием повторить действие. Как и все управляющие структуры, мы задаем вопрос, чтобы контролировать выполнение цикла. Термин «петля» происходит от кругового циклического движения, которое происходит при использовании блок-схемы. Базовая форма цикла «Повторить до» выглядит следующим образом:

.
 повтор
    некоторые заявления или действия
    некоторые заявления или действия
    некоторые заявления или действия
    обновить флаг
пока ответ на вопрос не станет верным 

В большинстве языков программирования вопрос (называемый проверочным выражением) представляет собой логическое выражение. Тип данных Boolean имеет два значения — true и false. Давайте перепишем структуру, чтобы учесть это:

 повтор
    некоторые заявления или действия
    некоторые заявления или действия
    некоторые заявления или действия
    обновить флаг
пока выражение не станет истинным 

В структуре управления «Повторить до» есть три атрибута правильно работающего цикла. Их:

  • Действие или действия
  • Обновление флага
  • Тестовое выражение

Английская формулировка звучит так: «Вы повторяете действие до тех пор, пока выражение не станет верным». Это зацикливание на ложном. Когда тестовое выражение становится истинным, вы останавливаете цикл и переходите к следующему элементу программы. Обратите внимание, поскольку это тест после цикла, действие всегда будет выполняться хотя бы один раз . Это называется «тест за циклом», потому что тест следует за действием. Его также иногда называют пост-тестовым циклом, что означает, что тест представляет собой пост (или «после» на латыни) действие и обновление.

Пример
 Делать
    Вывод "Каков ваш возраст?"
    Введите user_age
    Вывод «Каков возраст вашего друга?»
    Введите возраст_друга
    Вывод «Сумма ваших возрастов составляет:»
    Вывод age_user + friend_age
    Вывод «Хотите попробовать еще раз? y или n»
    Входной цикл_ответ
Пока loop_response == 'y' 

Присутствуют три атрибута проверки после цикла. Часть действия состоит из 6 строк, которые запрашивают данные, а затем отображают общее количество двух возрастов. Обновление флага — это отображение вопроса и получение ответа для переменной loop_response. Тест представляет собой относительное сравнение на равенство значения в переменной флага с символом нижнего регистра y.

Этот тип управления циклом называется циклом, управляемым событием. Обновление флага — это событие, когда кто-то решает, хотят ли они, чтобы цикл выполнялся снова.

Использование отступов с выравниванием действий цикла и обновлением флагов является обычной отраслевой практикой.

Бесконечные циклы

На этом этапе стоит упомянуть, что хорошее программирование всегда предусматривает метод, гарантирующий, что вопрос цикла в конечном итоге будет ложным, так что выполнение цикла прекратится, и программа продолжится со следующей строки кода. Однако если этого не происходит, то программа находится в бесконечном цикле. Бесконечные циклы — это плохо. Рассмотрим следующий код:

 loop_response = 'у'
Делать
    Вывод "Каков ваш возраст?"
    Введите user_age
    Вывод «Каков возраст вашего друга?»
    Введите возраст_друга
    Вывод «Сумма ваших возрастов составляет:»
    Вывод user_age + friend_age
Пока loop_response == 'y' 

Программист присвоил флагу значение перед циклом и забыл обновить флаг. Каждый раз, когда задается тестовое выражение, оно всегда будет истинным. Таким образом, бесконечный цикл, потому что программист не предусмотрел способ выхода из цикла (он забыл обновить флаг).

Рассмотрим следующий код:

 сделать
    Вывод "Каков ваш возраст?"
    Введите user_age
    Вывод «Каков возраст вашего друга?»
    Введите возраст_друга
    Вывод «Сумма ваших возрастов составляет:»
    Вывод age_user + friend_age
    Вывод «Хотите попробовать еще раз? y или n»
    Входной цикл_ответ
Пока loop_response = 'y' 

Независимо от того, что пользователь отвечает во время обновления флага, тестовое выражение не выполняет реляционное сравнение, а выполняет присваивание. Он присваивает переменной «y» и спрашивает, верно ли «y»? Поскольку все ненулевые значения рассматриваются как истинные, ответ на текстовый вопрос верен. Виола, у тебя бесконечный цикл.

Ключевые термины

элемент действия
Атрибут структур управления итерацией.
хотя бы один раз
Указывает, что циклы test after выполняют действие хотя бы один раз.
пока
Тест после структуры управления итерацией.
бесконечный цикл
Последовательность инструкций, которая зацикливается бесконечно, либо из-за того, что в цикле нет условия завершения, либо из-за наличия условия, которое никогда не может быть выполнено, либо из-за того, что цикл начинается заново. [3]
повторять до
Альтернативная структура управления тестом после итерации, доступная в некоторых языках программирования.
образец для испытаний
Атрибут структур управления итерацией.
Элемент обновления
Атрибут структур управления итерацией.

Ссылки

  • cnx.org: основы программирования — модульный структурированный подход с использованием C++

  1. Википедия: Цикл do while ↵
  2. Википедия: Цикл do while ↵
  3. Википедия: Бесконечный цикл ↵

Цикл while Python (с примерами)

В этом уроке мы узнаем о цикле while в Python программирование с помощью примеров.

Видео: Python while Loop

В программировании циклы используются для повторения блока кода. Например, если мы хотим показать сообщение 100 раз, мы можем использовать цикл. Это всего лишь простой пример, с помощью циклов мы можем добиться гораздо большего.

В предыдущем уроке мы узнали о цикле for в Python. Теперь мы узнаем о цикле while .


Python while Loop

Python while цикл используется для запуска блочного кода до тех пор, пока не будет выполнено определенное условие.

Синтаксис цикла while :

 условие while:
    # тело цикла while 

Здесь

  1. Цикл while оценивает условие
  2. Если условие оценивается как True , код внутри цикла while выполняется.
  3. условие оценивается снова.
  4. Этот процесс продолжается до тех пор, пока условие не станет False .
  5. Когда условие оценивается как False , цикл останавливается.

Блок-схема цикла while Python

Блок-схема цикла while

Пример: Python while Loop

 # программа для отображения чисел от 1 до 5
# инициализируем переменную
я = 1
п = 5
# цикл от i = 1 до 5
пока я <= п:
    печать (я)
    я = я + 1 

Выход

  1
2
3
4
5  

Вот как работает программа:

Переменная Условие: i <= n Действие
i = 1
n = 5
Правда 1 печатается. i увеличивается до 2 .
я = 2
н = 5
Правда 2 печатается. i увеличивается до 3 .
i = 3
n = 5
Правда 3 печатается. i увеличивается до 4 .
i = 4
n = 5
Правда 4 печатается. i увеличивается до 5 .
i = 5
n = 5
Правда 5 печатается. i увеличивается до 6 .
i = 6
n = 5
Ложь Цикл завершен.

Пример 2: Python while Loop

 # программа для вычисления суммы чисел
# пока пользователь не введет ноль
всего = 0
число = int(input('Введите число:'))
# добавляем числа, пока число не станет равным нулю
в то время как число != 0:
    итог += число # итог = итог + число
    
    # снова принять целочисленный ввод
    число = int(input('Введите число:'))
    
print('total =', total) 

Вывод

  Введите число: 12
Введите число: 4
Введите число: -5
Введите число: 0
всего = 11  

В приведенном выше примере , а повторяется до тех пор, пока пользователь не введет ноль. Когда пользователь вводит ноль, условие проверки оценивается как False , и цикл завершается.


Бесконечный цикл while в Python

Если условие цикла всегда равно True , цикл выполняется бесконечное количество раз (пока не заполнится память). Например,

 возраст = 32 года.
# условие проверки всегда истинно
в то время как возраст > 18:
    print('Вы можете голосовать') 

В приведенном выше примере условие всегда оценивается как True . Следовательно, тело цикла будет выполняться бесконечное количество раз.


Python Цикл While с else

В Python цикл while может иметь необязательный блок else .

Здесь часть else выполняется после того, как условие цикла оценивается как False .

 счетчик = 0
пока счетчик < 3:
    print('Внутренний цикл')
    счетчик = счетчик + 1
еще:
    print('Внутри еще') 

Выход

  Внутренняя петля
Внутренняя петля
Внутренняя петля
Внутри else  

Примечание : блок else не будет выполняться, если цикл while завершается оператором break.