Вступление
Компьютерные программы отлично подходят для автоматизации и повторения задач, поэтому нам не нужно этого делать. Один из способов повторить аналогичные задачи - использоватьloops. В этом руководстве мы рассмотрим Pythonwhile loop.
Циклwhile реализует повторное выполнение кода на основе заданного условияBoolean. Код, который находится в блокеwhile, будет выполняться до тех пор, пока операторwhile оценивается как True.
Вы можете представить циклwhile как повторяющийсяconditional statement. После оператораif программа продолжает выполнение кода, но в циклеwhile программа переходит обратно к началу оператора while, пока условие не станет ложным.
В отличие отfor loops, которые выполняются определенное количество раз, циклыwhile основаны на определенных условиях, поэтому вам не нужно знать, сколько раз повторять входящий код.
Пока петля
В Python циклыwhile построены так:
while [a condition is True]:
[do something]
То, что делается, будет выполняться до тех пор, пока оцениваемое условие больше не будет истинным.
Давайте создадим небольшую программу, которая выполняет циклwhile. В этой программе мы попросим пользователя ввести пароль. Проходя через этот цикл, есть два возможных результата:
-
Если парольis правильный, цикл
whileзавершится. -
Если парольnot правильный, цикл
whileпродолжит выполнение.
Мы создадим файл с именемpassword.py в выбранном текстовом редакторе и начнем с инициализации переменнойpassword как пустогоstring:
password.py
password = ''
Пустая строка будет использоваться для ввода от пользователя в циклеwhile.
Теперь мы построим операторwhile вместе с его условием:
password.py
password = ''
while password != 'password':
Здесь заwhile следует переменнаяpassword. Мы ищем, установлена ли для переменнойpassword строкаpassword (в зависимости от ввода пользователя позже), но вы можете выбрать любую строку, которую хотите.
Это означает, что если пользователь вводит строкуpassword, цикл остановится, и программа продолжит выполнение любого кода вне цикла. Однако, если строка, которую вводит пользователь, не равна строкеpassword, цикл будет продолжен.
Затем мы добавим блок кода, который что-то делает в циклеwhile:
password.py
password = ''
while password != 'password':
print('What is the password?')
password = input()
Внутри циклаwhile программа запускает оператор печати, который запрашивает пароль. Затем переменнаяpassword устанавливается на ввод пользователя с помощью функцииinput().
Программа проверит, присвоена ли переменнаяpassword строкеpassword, и если это так, циклwhile завершится. Давайте дадим программе еще одну строчку кода, когда это произойдет:
password.py
password = ''
while password != 'password':
print('What is the password?')
password = input()
print('Yes, the password is ' + password + '. You may enter.')
Последний операторprint() находится вне циклаwhile, поэтому, когда пользователь вводитpassword в качестве пароля, он увидит последний оператор печати вне цикла.
Однако, если пользователь никогда не вводит словоpassword, он никогда не доберется до последнего оператораprint() и застрянет в бесконечном цикле.
infinite loop возникает, когда программа продолжает выполняться в одном цикле, никогда не покидая его. Чтобы выйти из бесконечного цикла в командной строке, нажмитеCTRL + C.
Сохраните программу и запустите ее:
python password.py
Вам будет предложено ввести пароль, а затем вы можете проверить его с различными возможными вводами. Вот пример вывода из программы:
OutputWhat is the password?
hello
What is the password?
sammy
What is the password?
PASSWORD
What is the password?
password
Yes, the password is password. You may enter.
Имейте в виду, что строки чувствительны к регистру, если вы также не используетеstring function для преобразования строки во все строчные буквы (например) перед проверкой.
Пример программы с циклом while
Теперь, когда мы понимаем общую предпосылку циклаwhile, давайте создадим игру в угадывание командной строки, которая эффективно использует циклwhile. Чтобы лучше понять, как работает эта программа, вам также следует прочитать оusing conditional statements иconverting data types.
Сначала мы создадим файл с именемguess.py в выбранном текстовом редакторе. Мы хотим, чтобы компьютер выдавал случайные числа, чтобы пользователь мог их угадать, поэтому мы добавимimport к модулюrandom с операторомimport. Если вы не знакомы с этим пакетом, вы можете узнать больше оgenerating random numbers from the Python docs.
guess.py
import random
Затем мы присвоим случайное целое число переменнойnumber и оставим его в диапазоне от 1 до 25 (включительно) в надежде, что это не сделает игру слишком сложной.
guess.py
import random
number = random.randint(1, 25)
На этом этапе мы можем войти в наш циклwhile, сначала инициализируя переменную, а затем создавая цикл.
guess.py
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
Мы инициализировали переменнуюnumber_of_guesses равной 0, так что мы увеличиваем ее с каждой итерацией нашего цикла, чтобы у нас не было бесконечного цикла. Затем мы добавили операторwhile, чтобы числоnumber_of_guesses было ограничено 5. После пятого предположения пользователь вернется в командную строку, и на данный момент, если пользователь введет что-то кроме целого числа, он получит ошибку.
Внутри цикла мы добавили операторprint(), предлагающий пользователю ввести число, которое мы взяли с функциейinput() и установили в переменнуюguess. Затем мы преобразовалиguess из строки в целое число.
Прежде чем цикл закончится, мы также хотим увеличить переменнуюnumber_of_guesses на 1, чтобы мы могли пройти цикл 5 раз.
Наконец, мы пишем условный операторif, чтобы увидеть, эквивалентен лиguess, созданный пользователем,number, сгенерированный компьютером, и если да, мы используемbreak statement выйти из петли.
Программа полностью функционирует, и мы можем запустить ее с помощью следующей команды:
python guess.py
Хотя это работает, сейчас пользователь никогда не знает, верна ли его догадка, и он может угадать полные 5 раз, даже не зная, правильно ли они это сделали. Пример вывода текущей программы выглядит следующим образом:
OutputGuess 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
Давайте добавим некоторые условные операторы вне цикла, чтобы пользователь получил обратную связь относительно того, правильно ли он угадывает число или нет. Они пойдут в конец нашего текущего файла.
guess.py
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))
В этот момент программа сообщит пользователю, правильно ли он набрал число, что может не произойти до конца цикла, когда пользователь не догадывается.
Чтобы помочь пользователю в процессе, давайте добавим еще несколько условных операторов в циклwhile. Они могут сказать пользователю, было ли их число слишком низким или слишком высоким, так что они могут с большей вероятностью угадать правильное число. Мы добавим их перед строкойif guess == number
guess.py
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))
Когда мы снова запускаем программу сpython guess.py, мы видим, что пользователь получает более управляемую помощь в своих предположениях. Таким образом, если случайно сгенерированное число равно12 и пользователь угадывает18, ему сообщат, что его предположение слишком велико, и они могут соответствующим образом скорректировать свое следующее предположение.
Для улучшения кода можно сделать больше, включая обработку ошибок, когда пользователь не вводит целое число, но в этом примере мы видим циклwhile в работе в короткой программе командной строки.
Заключение
В этом руководстве было рассмотрено, как циклыwhile работают в Python и как их создавать. While loops продолжает цикл через блок кода при условии, что условие, установленное в оператореwhile, истинно.
Отсюда вы можете продолжить изучение циклов, прочитав руководства поfor loops иbreak, continue, and pass statements.