Как остановить цикл в питоне с клавиатуры
Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
i = 0
while i 5 :
print (i)
i += 1
Цикл while и цикл for имеют схожую структуру, НО есть одно важное различие - цикл while может быть бесконечным.
i = 0
while True :
print (i)
i += 1
Код выше будет бесконечно печатать возрастаютщую последовательность чисел.
Цикл while можно сравнить с цикличным условным оператором.
text = 'Hello world'
i = 0
while i len (text):
print (text[i])
i += 1
Код, приведенный выше, печатает строку посимвольно. Приведу пример аналогичного цикла for:
text = 'Hello world'
for i in text:
print (i)
Более того, я приведу даже два цикла for!
text = 'Hello world'
for i in range ( len (text)):
print (text[i])
Напомню, что отличие между двумя, приведенными выше примерами, в следующем: первый цикл проходит по элементам последовательности (в нашем случае строки), а второй — по ее индексам. Здесь также используется функция len(), которая позволяет узнать длину последовательности.
Вернемся к циклу while. Цикл while, как и цикл for, можно остановить с помощью специальной управлющей конструкции break.
j = 0
while True :
if j == 3 :
print ( 'Выход из цикла' )
break
print (j)
j += 1
Конструкция break прерывает цикл. Она очень похожа на обычное условие после ключевого слова while.
Так же есть еще одна управляющая конструкция - continue. С ее помощью мы можем не выпонять текущую итерацию (повторение) цикла и перейти сразу к следующему.
j = 0
while j 5 :
j += 1
if j == 3 :
print ( 'Пропускаем j == 3 ' )
continue
print (j)
Как и для цикла for, для цикла while мы можем записать конструкцию else.
from random import randint
j = 0
element = randint ( 0 , 15 )
while j 10 :
j += 1
if j == element:
print ( 'Нашли element, он равен' , element)
break
else :
print ( 'Неудачная попытка' )
Примеры решения задач
Возведение числа в степень с помощью цикла while
Сумма последовательности с помощью цикла while
n = int ( input ())
result = 0
i = 0
while i n:
result += i
i += 1
print (result)
Ввод последовательности чисел
i = 0
while True :
n = input ()
if n == 'end' :
print ( 'Ввод закончен' )
print ( 'Было введено' , i, 'чисел' )
break
n = int (n)
i += 1
Сумма введенных чисел
i = 0
summa = 0
while True :
n = input ()
if n == 'end' :
print ( 'Ввод закончен' )
print ( 'Было введено' , i, 'чисел' )
print ( 'Их сумма равна' , summa)
break
n = int (n)
summa += n
i += 1
Решение задач
1. Дано положительное число N. Вывести все числа от 0 до N с помощью цикла while.
2. Дано положительное число N. Вывести все числа от N до 0 с помощью цикла while. Пример:
3. Даны два положительных числа K и N (K 4. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A (взятие остатка A % B)
5. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A (деление нацело A // B)
6. Дано положительное число N. Найти сумму всех четных чисел от 0 до N с помощью цикла while.
7. Даны два положительных числа K и N (K нечетных чисел от K до N с помощью цикла while.
8. Дано положительное число N. Найти факториал числа N. Факториалом числа называется произведение всех чисел от 1 до N. Например, факториал числа 5 равен 5! = 1*2*3*4*5 = 120 , 2! = 1*2 = 2 , 9! = 1*2*3*4*5*6*7*8*9 = 362880
9. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести YES, если не является - вывести NO.
10. Дано целое число N (> 0). Найти двойной факториал N: N!! = N * (N-2) * (N-4)* . . Для решения этой задачи посмотрите на задачу 2
Сложные задачи
1. Дано целое число N (> 1). Найти наименьшее целое число K, при котором выполняется неравенство 3^K > N, где 3^K - это 3 в степени K или число 3, умноженное само на себя K раз. Например, 3^5 = 3*3*3*3*3 . Ответом в задаче будет первая степень числа 3, которая больше, чем заданное число N. Например, если N=41, распишем степени числа три: 3^1 = 3; 3^2 = 3*3 = 9; 3^3 = 3*3*3 = 27; 3^4 = 3*3*3*3 = 27 * 3 = 81; . Таким образом, первая степень, в которую возвести число 3, превышающая число N - это 4.
В этой задаче нужно выполнять цикл while, пока остаток от деления на число три равен 0
2. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).
Перед решением этой задачи вспомните, как найти сумму цифр трехначного числа.
3. Даны целые положительные числа A и B. Найти их наибольший общий делитель (НОД), используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A.
4. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0 5. Дано целое число N (> 1). Последовательность чисел Фибоначчи FK определяется следующим образом: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1), K = 3, 4, . . Проверить, является ли число N числом Фибоначчи. Если является, то вывести TRUE, если нет - вывести FALSE.
6. Даны положительные числа A, B, C. На прямоугольнике размера A x B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.
7. Дано целое число N (> 1), являющееся числом Фибоначчи: N = F(K). Найти целое число K - порядковый номер числа Фибоначчи N.
И спользование циклов предоставляет программисту возможность многократного исполнения определенного участка кода. Это один из основных рабочих инструментов любого разработчика, и практически ни одна из существующих программ не обходится без него.
Циклы в языке Python представлены двумя основными конструкциями: while и for . Цикл while считается универсальным, в то время как for нужен для обхода последовательности поэлементно. Более подробную информацию о цикле for вы можете прочитать здесь .
Так или иначе, обе конструкции одинаково применимы и являются важнейшими элементами любого высокоуровневого языка, в том числе и языка Python.
Немного информатики
Как было отмечено выше,
Цикл — это управляющая конструкция, которая раз за разом выполняет серию команд (тело цикла) до тех пор, пока условие для выполнения является истинным.
Напишем на псевдокоде классическую схему:
повторять, пока условие начало цикла последовательность инструкций конец цикла
Конструкция начинает свою работу с проверки условия, и, если оно истинно, запускается цикл. На каждой новой итерации (единичный проход по циклу) условие продолжения проверяется вновь. Таким образом, последовательность инструкций будет исполняться до тех пор, пока это условие, наконец, не окажется ложным.
Циклы, как механизм программирования, нужны, главным образом, для упрощения написания кода. Вполне очевидно, что создавать программу, выполняющую определённую операцию для каждой точки 4К дисплея в отсутствии циклов — это вручную повторять описание нужной команды 4096*2160 раз. 🤔 Много? Безусловно.
Применение в этой задаче всего одного цикла позволит сократить длину кода, как минимум, на 6 порядков. А если представить, что ту же самую программу нужно переписать для 8К монитора, то, вместо изменения всего одной инструкции в счетчике цикла, вам придётся дописывать ещё пару десятков миллионов строк кода, что является попросту недопустимым по своей величине и трудозатратам объёмом.
Польза циклов ясна и очевидна. Обладая мощной выразительностью и ёмкой натурой, они, без сомнений, являются одним из фундаментальных конструктов высокоуровневого программирования. Каждому разработчику необходимо знать и понимать принципы их работы.
Синтаксис цикла while
В самом простом случае, цикл while в python очень похож по своей структуре на условную конструкцию с if :
И в том и в другом случае, блок кода внутри (инструкция print(‘…’) ) будет исполнен тогда и только тогда, когда условие (a == 1) будет иметь значение True . Вот только в конструкции с if , при успешной проверке, вывод на экран будет выполнен всего один раз, а в случае с while фраза "I’m the loop" будет печататься бесконечно.
Такое явление называется бесконечным циклом . У них есть свои определенные смысл и польза, но их мы разберём чуть позже, поскольку чаще всего цикл всё-таки должен как-то заканчиваться. И вполне логично, что для его завершения нужно произвести определенные манипуляции с условием.
Переменная a , в примере выше, называется управляющей (или счетчик). При помощи таких переменных можно контролировать момент выхода из цикла. Для этого их следует сравнить с каким-либо значением.
В Python есть и более сложные, составные условия. Они могут быть сколь угодно длинными, а в их записи используются логические операторы ( not , and , or ):
Как можно заметить, управляющая переменная вовсе не обязана являться счётчиком. Она может быть просто логической переменной, чье значение изменяется где-то в самом цикле:
Стоит иметь в виду, что использование неинициализированной переменной в качестве управляющей цикла обязательно приведёт к возникновению ошибки:
Несколько примеров использования цикла while
Идея циклов while проста: требуется определенное количество раз сделать что-то? Заведи счётчик и уменьшай/увеличивай его в теле цикла.
Своеобразным счётчиком может быть даже строка:
break и continue
Оператор break заставляет интерпретатор прервать выполнение цикла и перейти к следующей за ним инструкции:
counter = 0 while True: if counter == 10: break counter += 1
Цикл прервётся после того, как значение счетчика дойдёт до десяти.
Существует похожий оператор под названием continue , однако он не прекращает выполнение всей конструкции, а прерывает лишь текущую итерацию, переходя затем в начало цикла:
Эти операторы бывают весьма удобны, однако плохой практикой считается написание кода, который чересчур ими перегружен.
В Python-циклах часть else выполняется лишь тогда, когда цикл отработал, не будучи прерван break -ом.
В реальной практике, else в циклах применяется нечасто. Такая конструкция отлично сработает, когда будет необходимо проверить факт выполнения всех итераций цикла.
👉 Пример из практики : проверка доступности всех выбранных узлов сети
Например, обойти все узлы локальной сети и
В каком-либо другом языке стоило бы завести булеву переменную, в которой хранится результат проверки, но у Python, как всегда, есть способ получше!
while true или бесконечный цикл
В большинстве случаев, бесконечные циклы появляются из-за логических ошибок программиста (например, когда условие цикла while при любых вариантах равно True ). Поэтому следует внимательно следить за условием, при котором цикл будет завершаться.
Однако вы некоторых случая бесконечный цикл делают намерено:
- Если нужно производить какие-то действия с интервалом, и выходить из цикла лишь в том случае, когда внутри тела "зашито" условие выхода. Пример : функция, которая возвращает connection базы данных. Если связь с базой данных отсутствует, соединение будет пытаться (в цикле) установиться до тех пор, пока не установится.
- Если вы пишете полноценный демон, который продолжительное время висит как процесс в системе и периодически производит какие-то действия. В таком случае остановкой цикла будет прерывание работы программы. Пример : скрипт, который раз в 10 минут "пингует" IP адреса и пишет в лог отчет о доступности этих адресов.
💁♂️ Совет : в бесконечных циклах рекомендуется ставить таймаут выполнения после каждой итерации, иначе вы очень сильно нагрузите CPU :
import time while True: print("Бесконечный цикл") time.sleep(1) > Бесконечный цикл Бесконечный цикл Бесконечный цикл Traceback (most recent call last): File "main.py", line 5, in <module> time.sleep(1) KeyboardInterrupt Aborted!
Код был прерван комбинацией клавиш ^Ctrl + C . Иначе цикл продолжался бы бесконечно.
Best practice
Цикл while в одну строку
Для составных конструкций (таких, где нужен блок с отступом), можно этот отступ убрать, но только если в блоке используются простые операторы. Отделяются они всё также двоеточием.
будут считаться эквивалентными, и при чтении второй из них интерпретатор не будет выдавать ошибку.
Вложенные циклы
Вложенные while циклы встречаются не так часто, как их братья (или сестры) for , что, однако не мешает им быть полезными. Простой пример — выведем на экран таблицу умножения:
q = 1 while q <= 9: w = 1 while w <= 9: print(q * w, end=" ") w += 1 q += 1 print("") > 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Нет никаких проблем с использованием вложенных циклов while , однако стоит иметь в виду, что вложения свыше третьего уровня будут уже практически нечитаемыми для человека.
Как выйти с помощью break из двух циклов
В случае вложенных циклов, оператор break завершает работу только того цикла, внутри которого он был вызван:
В Python не существует конструкций, которая прерывала бы сразу несколько циклов. Но есть как минимум 3 способа, которыми можно реализовать данное поведение:
Способ №1 Используем конструкцию for . else . :
Если все итерации вложенного цикла сработают, выполнится else , который скажет внешнему циклу продолжить выполнение. Если во внутреннем цикле сработает break , сразу выполнится второй break .
Способ №2 Через создание дополнительного флага:
Внешний цикл был прерван вслед за внутренним. Дело сделано!
Способ №3 Если циклы находятся в функции (как в нашем примере), достаточно просто сделать return :
Зачем остановить сценарий Python?
Пока есть ряд причин, по которым это может потребоваться, они в основном падают на две отдельные категории:
- Вы сделали ошибку с вашим кодом, например, программа продолжает работать в бесконечном или, по крайней мере, очень длинный, цикл (любой, кто использовал Python, возможно, может относиться к этому!)
- Сам код правильный, но вы хотите остановить свой скрипт, если определенные условия либо имеют или не были выполнены.
Вариант 2 можно запланировать, включая механизм остановки в нашем коде, I.E. Программно. Для варианта 1 мы должны понять, как произвольно остановить наш код, когда программа работает, и мы сделаем это, используя нашу клавиатуру. Давайте посмотрим на эти два варианта более подробно.
Клавиатура останавливается
Точный механизм для остановки клавиатуры действительно будет зависеть от вашей операционной системы, для целей этой статьи мы будем использовать машину Windows 10, поэтому весь синтаксис будет относиться к этой среде.
Начать с того, что давайте собрали небольшой сценарий, который даст нам проблему, которую мы стремимся решить, и называть это Test.py и сохранить его в рабочем каталоге C: \ Пользователи \ Rikesh :
Если мы сейчас запустим вышеупомянутый скрипт через наш переводчик Python, он будет просто продолжать печатать номера последовательно на неопределенный срок. Мы не привели к нему никаких условий, чтобы остановиться.
Прерывание клавиатуры
Одним из наиболее распространенных методов остановки скрипта является использованием следующего сочетания клавиш, который известен как KeyboardInterRupt:
Когда мы используем это, мы получаем ответ от нашего переводчика Python, говоря нам, что программа была остановлена с помощью этого ярлыка.
2.2 Ctrl + пауза/перерыв
Хотя вышеизложенное работает хорошо с нашим простым примером кода, есть времена, когда это может быть не так. Например, наш скрипт мог бы явно остановить это от работы, специально исключая клавиатуру I.E, кроме KeyboardInterTrupt, или он может даже быть исключен с нормальным, кроме синтаксиса. Например:
В этом случае мы можем использовать Ctrl + Pause/Break, которая является гораздо более мощным способом остановки нашего сценария.
Программные остановки
Таким образом, мы видели, как использовать нашу клавиатуру, чтобы остановить наши скрипты, теперь давайте посмотрим, как мы можем использовать наш код, чтобы остановить скрипты. Это, очевидно, потребует от нас понимать наш код и предварительно определить, где будет необходима любые остановки.
Программно в процессе развития
При запуске Python модуль сайта автоматически загружен автоматически, и это по умолчанию поставляется с объектами QUIT () и EXIT (). Эти два объекта работают так же, как следует, и, поскольку их имена предлагают можно использовать для остановки наших скриптов:
В обоих случаях, если мы запустим код выше из нашего интерпретатора, программа автоматически остановится и выйдет/выходит, как только X попадет до 5.
Однако, пожалуйста, обратите внимание как Quit () и Выход () предназначены только для использования в интерпретатере Python, где был загружен модуль сайта. Никто из них не считается подходящим для использования в производственном коде, то есть в реальной ситуации, поскольку мы не контролируем, как и если модуль сайта загружен. По этой причине оба из этих вариантов следует использовать только в целях развития и в переводчике Python.
Программно в производственном коде
Так что теперь давайте посмотрим на то, как мы можем остановить наши сценарии бегать в производственном коде. Чтобы уточнить, этим мы имеем в виду код, который готов к отправке клиенту/конечным пользователю. Он был отлажен и хорошо структурирован и хорошо документирован.
Использование sys.exit ()
Это самый распространенный способ остановки наших сценариев программно, и это делает это, бросая/повышая исключение системы. Если исключение не поймано, что переводчик Python закрыт, и программа останавливается. Как нам нужно явно импортировать модуль SYS, мы производим SYS часть нашего сценария, эффективно гарантируя, что он всегда будет там, когда код работает. Это делает этот метод идеальным для использования в нашем производственном коде:
Теперь, запустив скрипт, мы получаем следующий вывод:
Хотя конечный результат такой же, как и раньше, с Quit () и Выход () Этот метод считается хорошей практикой и хорошим кодированием. Поскольку мы импортировали модуль SYS в нашему сценарию, он всегда будет доступен, когда сценарий работает ..
Поднять системуExit.
Это интересно, потому что он делает все, что sys.exit () Есть ли, похоже, не используется или не считается наилучшей практикой. Это имеет преимущество, что не требует никакого импорта и всех sys.exit () Операция делает, как мы видели в предыдущем разделе, это поднять SystemExit Исключение в любом случае. Поэтому есть аргумент, что, используя этот метод, мы делаем наш очиститель кода и более эффективным:
И когда мы запускаем код, вывод выглядит следующим образом:
Использование OS._EXIT ()
Последний метод мы рассмотрим OS._EXIT () который является частью Python ОС Модуль, обеспечивающий функции для взаимодействия непосредственно с операционной системой. Этот метод в основном призывает к немедленному прекращению программы, а не повысить исключение, так что, возможно, самый экстремальный из всех, как мы видели.
И когда мы запускаем код, вывод выглядит следующим образом:
Резюме
Мы видели ряд методов прекращения ваших сценариев Python, которые не должны приходить как сюрприз для всех, кто знаком с Python. Пока все они предоставляют один и тот же конечный результат, у них есть разные приложения, особенно между использованием клавиатуры или просто находятся в программном порядке с вашим кодом.
Цикл while позволяет повторить одно или несколько действий до тех пор, пока заданное условие остается истинным.
1. Цикл while в Python
Цикл while в Python используется во многих программах. Он позволяет выполнять программу пока остается истинным условие. Приведем пример перебора числовой последовательности в заданном диапазоне.
Вначале присваиваем значение переменной number. Затем запускаем цикл while до тех пор, пока значение переменной number не будет больше 7. При каждом проходе цикла выводим значение number и затем увеличиваем его на 1. Как только значение number станет больше 7 цикл прекращается.
1.2. Как прервать цикл while на Python.
Предположим, что вам нужно остановить программу, когда пользователь захочет этого. Для этого в программе определяем признак завершения, и программа работает до тех пор, пока пользователь не ввел нужное значение. Признаком завершения может быть как число, так и строка или символ. Приведем пример простого цикла while при котором пользователь вводит слово, а оно возвращается, наоборот.
Пока пользователь не введет слово "стоп", цикл будет начинаться заново.
1.3. Флаги в цикле while на Python
Если программа должна выполняться при нескольких условиях, то лучше определить одну переменную - флаг. Переменная - флаг сообщает, должна ли программа выполняться при каждом цикле. Для флага достаточно определить два состояния True - в котором программа продолжит выполнение и False - завершение программы. В результате в начале цикла while достаточно проверить всего одно условие для запуска программы, а все остальные проверки организовать в остальном коде.
В примере переменной active присваивается True и программа будет выполняться до тех пор, пока переменная active не станет равной False. Результат работы этой программы ничем не будет отличаться от программы в разделе 1.2. Вот что получим мы на выходе.
Программа завершится если пользователь введет "стоп". После этого переменная active становится равной False и действие цикла прекращается.
2.1. Команда break в цикле while на Python
С помощью команды break так же можно прервать цикл while. Цикл, который начинается с while True выполняется бесконечно, пока не будет выполнена команда break .
В результате цикл while будет выполняться до тех пор, пока не будет введен правильный ответ, после чего сработает команда break и произойдет выход из цикла.
Введите столицу США с заглавной буквы: Лондон
Лондон не является столицей США
Введите столицу США с заглавной буквы: Москва
Москва не является столицей США
Введите столицу США с заглавной буквы: Вашингтон
Совершенно верно
2.2. Команда continue в цикле while на Python
Предположим, что вам нужно прервать цикл while при выполнение каких-либо условий и запустить его заново. Для этого можно воспользоваться командой continue . Напишем цикл while , который выводит только четные числа в диапазоне от 1 до 20:
Сначала создадим переменную number и присвоим ей начальное значение. После идет проверка условий цикла что значение number меньше 20. При входе в цикл значение number увеличивается на 1 и затем команда if проверяет остаток от деления на 2. Если остаток равен одному, то число не четное, команда continue приказывает Python игнорировать остаток кода и цикл запускается заново. Если остаток от деления равен нулю, то число выводится на экран и так до того пока number будет равен 20, затем условия цикла while не будут выполнены и цикл прекратится.
3. Предотвращение зацикливания в циклах while на Python
В каждом цикле должно быть предусмотрена возможность завершения, чтобы цикл while не выполнялся бесконечно. Например, если в предыдущем примере мы пропустили бы строку number += 1 , то значение number всегда будет равно 0 и цикл будет продолжаться до бесконечности
Для предотвращения зацикливания в терминальном окне введите Ctrl + C и всегда заранее проверяйте все условия цикла while и пути выхода из него.
4. Цикл while со списками в Python
Для изменения списков в процессе обработки удобно использовать цикл while . К примеру, у нас есть целый список пользователей, который может состоять из тысяч пользователей и нам нужно будут удалить всех пользователей с определенным именем. Нам уже известно, что метод remove() для списков удаляет лишь первое вхождение заданного значения в список, но нам нужно удалить их все. В этом случае мы можем запустить цикл while :
5. Цикл while со словарями в Python
При каждом проходе цикла while программа может выполнять любое действие. Так же, как и со списками, цикл while работает и со словарями. Создадим программу, которая будет запрашивать у посетителя имя и записывать ответы на заданный вопрос и в конце выводить словарь на экран:
Как вас зовут? bob
Какая марка автомобиля вам нравиться: audi
Желаете добавить еще один автомобиль? (yes/no) yes
Какая марка автомобиля вам еще нравиться: bmw
Желаете добавить еще один автомобиль? (yes/no) yes
Какая марка автомобиля вам еще нравиться: ford
Желаете добавить еще один автомобиль? (yes/no) no
Желаете продолжить опрос? (yes/no) yes
Как вас зовут? Artem
Какая марка автомобиля вам нравиться: porshe
Желаете добавить еще один автомобиль? (yes/no) no
Желаете продолжить опрос? (yes/no) no
Опрос завершен, все результаты:
Bob любит автомобили марки:
Audi
Bmw
Ford
Компьютерные программы могут автоматически повторять последовательность задач. Для этого в них используются циклы. В данном руководстве мы рассмотрим цикл while в Python 3.
Цикл while выполняет последовательность действий согласно логическому условию.
Код цикла while будет повторяться до тех пор, пока логическое условие истинно (True).
Цикл while можно сравнить с повторяющимся условным выражением.
После оператора if программа продолжает выполнять код, а в цикле while программа возвращается в начало блока кода до тех пор, пока условие не станет ложным.
В отличие от цикла for, который повторяет последовательность определённое количество раз, цикл while руководствуется не количеством, а логическим условием, потому вам не нужно точно знать, сколько раз необходимо выполнить код.
Основы работы с циклом while
В Python циклы while создаются таким образом:
while [a condition is True]:
[do something]
Указанное действие будет повторяться, пока условие истинно.
Попробуйте написать небольшую тестовую программу, в которой будет использован цикл while. Эта программа будет предлагать пользователю ввести пароль. В данном случае возможны два результата:
- Если пароль правильный, цикл while будет прерван.
- Если пароль указан неверно, цикл while будет повторять запрос пароля.
С помощью текстового редактора создайте файл password.py и инициализируйте в нём переменную password; её значение – пустая строка.
Пустая строка будет принимать входные данные пользователя в цикл while.
Затем добавьте цикл while:
password = ''
while password != 'password':
После while следует переменная password. В данном случае цикл должен убедиться, что переменная password соответствует строке password, которую должен ввести пользователь (вы можете выбрать любой другой пароль).
То есть если пользователь вводит строку password, цикл останавливается, и программа продолжает выполнять код вне тела цикла. Однако если пользователь вводит другую строку, цикл продолжит работу, и программа снова предложит пользователю ввести пароль.
После этого нужно добавить блок кода для цикла while:
password = ''
while password != 'password':
print('What is the password?')
password = input()
Внутри цикла while программа запускает выражение print, которое запрашивает пароль. Переменная password принимает пользовательский ввод при помощи функции input().
Программа проверит, какое значение присвоено переменной password (должна быть строка password), и если ей присвоено правильное значение, она остановит цикл while.
password = ''
while password != 'password':
print('What is the password?')
password = input()
print('Yes, the password is ' + password + '. You may enter.')
Последнее выражение print() находится вне тела цикла while. Если пользователь указал правильный пароль, цикл прервётся, а программа выведет на экран текст в кавычках.
Однако если пользователь предоставит неверный пароль, он не увидит этого текста, так как программа перезапустит цикл.
Бесконечный цикл возникает тогда, когда программа продолжает выполнение одного цикла и не может прекратить выполнять его. Чтобы остановить бесконечный цикл с помощью командной строки, нажмите клавиши CTRL + C.
Сохраните программу и запустите её.
Вам будет предложено указать пароль. Попробуйте ввести несколько разных паролей, чтобы проверить работу программы.
What is the password?
hello
What is the password?
idontknow
What is the password?
PASSWORD
What is the password?
password
Yes, the password is password. You may enter.
Помните о том, что строки учитывают регистр.
Пример использования цикла while
Теперь вы знакомы с основами цикла while. Давайте попробуем написать игру на угадывание для командной строки на основе этого цикла.
Примечание: Чтобы лучше понять, как работает такая программа, ознакомьтесь со статьями
Создайте в редакторе файл guess.py. Смысл игры состоит в том, что компьютер загадывает случайное число, которое должен угадать пользователь. Для этого нужно импортировать модуль random с помощью выражения import. Больше информации о пакете можно найти здесь.
Добавьте в файл:
Теперь нужно присвоить переменной number случайное число в диапазоне 1-25 включительно.
import random
number = random.randint(1, 25)
Далее нужно добавить цикл while. Сначала инициируйте переменную, а затем создайте цикл.
import random
number = random.randint(1, 25)
number_of_guesses = 0
while number_of_guesses < 5:
print('Guess a number between 1 and 25:')
guess = input()
guess = int(guess)
number_of_guesses = number_of_guesses + 1
if guess == number:
break
В теле цикла есть выражение print(), которое предлагает пользователю ввести число, которое передаётся функции input() и присваивается переменной guess. После этого строка из переменной guess преобразовывается в целое число. До выхода из цикла нужно ещё увеличить значение number_of_guesses на 1. Максимальное количество попыток – 5.
Затем нужно добавить выражение if, чтобы сравнить значение guess (число, которое ввёл пользователь) со значением number (число, которое загадал компьютер). Если пользователь угадал загаданное число, программа переходит к выражению break, чтобы прервать цикл.
Программа готова к работе. Сохраните и запустите её:
Программа работает, но не сообщает пользователю никаких результатов: пользователь не знает, угадал он число или нет. На данный момент вывод программы выглядит так:
Guess a number between 1 and 25:
11
Guess a number between 1 and 25:
19
Guess a number between 1 and 25:
22
Guess a number between 1 and 25:
3
Guess a number between 1 and 25:
8
Давайте добавим в программу условные операторы, чтобы наладить обратную связь с пользователем. Добавьте в конец файла такой код:
import random
number = random.randint(1, 25)
number_of_guesses = 0
while number_of_guesses < 5:
print('Guess a number between 1 and 25:')
guess = input()
guess = int(guess)
number_of_guesses = number_of_guesses + 1
if guess == number:
break
if guess == number:
print('You guessed the number in ' + str(number_of_guesses) + ' tries!')
else:
print('You did not guess the number. The number was ' + str(number))
Теперь программа сообщит пользователю, угадал он число или нет, но это произойдёт только после того, как он потратит все попытки.
import random
number = random.randint(1, 25)
number_of_guesses = 0
while number_of_guesses < 5:
print('Guess a number between 1 and 25:')
guess = input()
guess = int(guess)
number_of_guesses = number_of_guesses + 1
if guess < number:
print('Your guess is too low')
if guess > number:
print('Your guess is too high')
if guess == number:
break
if guess == number:
print('You guessed the number in ' + str(number_of_guesses) + ' tries!')
else:
print('You did not guess the number. The number was ' + str(number))
Сохраните и запустите программу:
Теперь программа помогает пользователю угадать число, даёт ему подсказки. К примеру, если компьютер загадал число 12, а пользователь ввёл 19, программа подскажет, что введённое число больше загаданного.
Эту игру можно усовершенствовать, например, добавить обработку ошибок.
Заключение
Теперь вы знаете, как работает цикл while в языке программирования Python. Циклы while повторяют последовательность задач до тех пор, пока условие не станет ложным.
Читайте также: