Цикл while в Python
Цикл while («пока») позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается после ключевого слова while и проверяется до выполнения тела цикла.
Цикл while используется, когда невозможно определить точное количество повторений цикла.
i = 0 # объявление переменной i для условия цикла
while i 5 : # ключевое слово ‘while’ и условие выполнение цикла
# тело цикла
print (i) # вывод значения переменной i
i += 1 # увеличение значения переменной i на единицу
Цикл while может быть бесконечным.
i = 0
while True : # условие всегда истинно
print (i)
i += 1
# Вывод:
>> 0
>> 1
>> 2
>> 3
>> 4
.
>> 999
.
# Это может продолжаться долго.
Выполнение цикла можно прерывать с помощью оператора break.
i = 0
while 1 : # условие всегда истинно
if i == 3 : # если i равно 3, то вызываем оператор break
break # оператор break прерывает выполнение цикла
print (i)
i += 1
Оператор continue начинает повторение цикла заново.
i = 0
while i 5 :
i += 1 #
if i % 2 == 1 : # если значение i нечетно, то вызываем оператор continue
continue # оператор continue начинает повторение цикла заново
# в случае вызова continue код ниже не выполнится
print (i)
Как и для цикла for, для цикла while мы можем записать конструкцию else.
x = 1
while x 5 :
print (x)
x += 1
else :
print ( ‘Цикл завершен’ )
Примеры
# Пользователь вводит числа A и B (A > B). Выведите все числа от A до B включительно.
A = int ( input ( ‘Введите число: ‘ ))
B = int ( input ( ‘Введите число: ‘ ))
# Пользователь вводит числа до тех пор, пока не введет 0.
# Выведите количество введенных чисел (0 считать не нужно).
n = int ( input ( ‘Введите число: ‘ ))
counter = 0 # счетчик введенных чисел
while n: # n неявно преобразуется в тип bool
# если n равно 0, то выполнение цикла прервется
n = int ( input ( ‘Введите число: ‘ )) # вводим очередное число
counter += 1 # увеличиваем счетчик
print ( f ‘Количество чисел ‘ )
# Ввод:
>> 1
>> 10
>> 100
>> 1000
>> 0
# Вывод:
>> Количество чисел 4
# Пользователь вводит число N (N > 1). Выведите его наименьший делитель.
N = int ( input ( ‘Введите число: ‘ ))
div = 2
while N % div != 0 :
div += 1
print ( f ‘Наименьший делитель равен ‘ )
# Ввод:
>> 10
# Вывод:
>> Наименьший делитель равен 2
# Ввод:
>> 15
# Вывод:
>> Наименьший делитель равен 3
# Ввод:
>> 17
# Вывод:
>> Наименьший делитель равен 17
Решение задач
Пользователь вводит числа A и B (A > B). Выведите четные числа от A до B включительно.
Пользователь вводит числа A и B (A # Ввод:
>> 1
>> 15
# Вывод:
>> 3
>> 6
>> 9
>> 12
>> 15
Пользователь вводит числа до тех пор, пока не введет 0. Выведите сумму введенных чисел (0 считать не нужно).
# Ввод:
>> 1
>> 15
>> 10
>> 11
>> 2
>> 0
# Вывод:
>> Сумма равна: 39
Пользователь вводит числа до тех пор, пока не введет 0. Выведите максимальное введенное число (0 считать не нужно).
# Ввод:
>> 1
>> 15
>> 10
>> 11
>> 2
>> 0
# Вывод:
>> Максимум равен: 15
Пользователь вводит числа до тех пор, пока не введет 0. Выведите минимальное введенное число (0 считать не нужно).
# Ввод:
>> 1
>> 15
>> 10
>> 11
>> 2
>> 0 # 0 не входит в последовательность
# Вывод:
>> Минимум равен: 1
Пользователь вводит число N. Выведите факториал число N. Факториал числа N — это произведение всех чисел от 1 до N включительно. Например, факториал числа 5 равен 120.
7. Фибоначчи (финальный босс)
Пользователь вводит число N. Выведите N-ное по счету число Фибоначчи. Последовательность чисел Фибоначчи рассчитывается по такой формуле: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1). Идея такая: каждое следующее число равно сумму двух предыдущих.
Первые 10 чисел последовательности: 1 1 2 3 5 8 13 21 34 55 .
Питон цикл while and
Цикл 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:
Если пользователь введет набор цифр 45 50 121 119 95 105 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
3. Цикл while может быть вложенным. Этот код выводит простые числа из диапазона от 2 до 100:
i = 2 while(i < 100): j = 2 while j i / j: print(f' - простое число') i = i + 1
4. В качестве вложенных циклов while могут включать в себя циклы for . Этот код, к примеру, будет бесконечно печатать цифры в диапазоне от 0 до 5:
while True: for i in range(5): print(i)
5. Любой цикл for можно заменить циклом while, но обратное возможно только в том случае, когда количество итераций можно определить до начала цикла. К примеру, эти циклы while и for равнозначны – оба печатают цифры от 0 до 9:
А этот цикл while заменить циклом for невозможно – программа будет бесконечно возводить в квадрат все введенные пользователем числа, пока не получит 0 :
n = int(input()) while True: if n == 0: break print(n ** 2) n = int(input())
Практика
Задание 1
Напишите программу, которая принимает на вход целые числа и вычисляет их сумму, пока пользователь не введет 0.
summa = 0 while True: n = int(input()) summa += n if n == 0: break print(summa)
Задание 2
Напишите программу, которая получает от пользователя число n > 100, и вычисляет (без использования методов строк) произведение цифр, из которых n состоит.
n = int(input()) prod = 1 while n: prod *= n % 10 n //= 10 print(prod)
Задание 3
Напишите программу, которая получает на вход два числа a и b , и находит наименьшее число c , которое без остатка делится на a и b.
a, b = int(input()), int(input()) c = a while c % b: c += a print(c)
Задание 4
Напишите программу, которая составляет строку из полученных от пользователя слов, пока длина строки не достигнет 50 символов. Слова, начинающиеся с гласных, в строку не включаются.
о бойся Бармаглота сын он так свиреп и дик а в глуще рымит
бойся Бармаглота сын так свиреп дик в глуще рымит
Задание 5
Напишите программу для конвертации числа из десятичного системы в двоичную без использования функции bin () .
n = int(input()) result = '' while n > 0: result = str(n % 2) + result n = n // 2 print(result)
Задание 6
Напишите программу, которая получает на вход число и без использования строковых методов переставляет цифры в обратном порядке.
n = int(input()) rev = 0 while n!= 0: r = n % 10 rev = rev * 10 + r n = n // 10 print(rev)
Задание 7
Напишите программу для вычисления факториала числа n без использования функции math.factorial() .
n = int(input()) fact = 1 while n > 1: fact *= n n -= 1 print(fact)
Задание 8
Напишите программу, которая получает от пользователя число n и определяет, является ли оно простым, или у него есть делители, кроме 1 и самого себя.
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'делится на ') i += 1 if flag: print(f'Таким образом, не является простым числом') else: print(f' - простое число')
Задание 9
Напишите программу, использующую вложенный цикл while для вывода треугольника размером n x n х n , состоящего из символов * .
n = int(input()) i, j = 0, 0 while i < n: while j
Задание 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 = rand_keys = list(months.keys()) random.shuffle(rand_keys) for key in rand_keys: counter = 0 while counter < attempts: spelling = input(f'Месяц по-английски называется: ') if spelling.title() == monthsПитон цикл while and: correct += 1 break else: counter += 1 wrong += 1 print(f'Неверно! Осталось попыток: ') else: print(f'Попытки исчерпаны!') print('Конец игры') print(f'Количество правильных ответов: ') print(f'Число ошибок: ')
Подведем итоги
Цикл while используют в случаях, когда число итераций невозможно оценить заранее. Во всех остальных случаях лучше применять цикл for . Чтобы цикл while случайно не превратился в бесконечный, стоит продумать все события и условия, которые должны приводить к своевременному прерыванию программы.
В следующей статье приступим к изучению функций.
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
- Анонимные функции
- Рекурсивные функции
- Функции высшего порядка, замыкания и декораторы
- Методы работы с файлами и файловой системой
- Регулярные выражения
- Основы скрапинга и парсинга
- Основы ООП: инкапсуляция и наследование
- Основы ООП – абстракция и полиморфизм
- Графический интерфейс на Tkinter
- Основы разработки игр на Pygame
- Основы работы с SQLite
- Основы веб-разработки на Flask
- Основы работы с NumPy