Циклы while в Python 3

Published by Leave your thoughts

Компьютерные программы могут автоматически повторять последовательность задач. Для этого в них используются циклы. В данном руководстве мы рассмотрим цикл while в Python 3.

Цикл while выполняет последовательность действий согласно логическому условию.

Читайте также: Логические выражения в Python 3

Код цикла while будет повторяться до тех пор, пока логическое условие истинно (True).

Цикл while можно сравнить с повторяющимся условным выражением.

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

Читайте также: Условные операторы в Python 3

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

Основы работы с циклом while

В Python циклы while создаются таким образом:

while [a condition is True]:
[do something]

Указанное действие будет повторяться, пока условие истинно.

Попробуйте написать небольшую тестовую программу, в которой будет использован цикл while. Эта программа будет предлагать пользователю ввести пароль. В данном случае возможны два результата:

  1. Если пароль правильный, цикл while будет прерван.
  2. Если пароль указан неверно, цикл while будет повторять запрос пароля.

С помощью текстового редактора создайте файл password.py и инициализируйте в нём переменную password; её значение – пустая строка.

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.

Сохраните программу и запустите её.

python password.py

Вам будет предложено указать пароль. Попробуйте ввести несколько разных паролей, чтобы проверить работу программы.

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.

Помните о том, что строки учитывают регистр.

Читайте также: Методы строк в Python 3

Пример использования цикла while

Теперь вы знакомы с основами цикла while. Давайте попробуем написать игру на угадывание для командной строки на основе этого цикла.

Примечание: Чтобы лучше понять, как работает такая программа, ознакомьтесь со статьями

Создайте в редакторе файл guess.py. Смысл игры состоит в том, что компьютер загадывает случайное число, которое должен угадать пользователь. Для этого нужно импортировать модуль random с помощью выражения import. Больше информации о пакете можно найти здесь.

Добавьте в файл:

import random

Теперь нужно присвоить переменной 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

Переменной number_of_guesses присвоено значение 0, которое будет увеличиваться с каждой попыткой угадать число; это необходимо, чтобы программа не попала в бесконечный цикл. Далее следует выражение while, которое ограничивает number_of_guesses до 5. После пятой неудачной попытки пользователь вернется в командную строку. На данный момент программа принимает только целые числа; в противном случае она выдаёт сообщение об ошибке.

В теле цикла есть выражение print(), которое предлагает пользователю ввести число, которое передаётся функции input() и присваивается переменной guess. После этого строка из переменной guess преобразовывается в целое число. До выхода из цикла нужно ещё увеличить значение number_of_guesses на 1. Максимальное количество попыток – 5.

Затем нужно добавить выражение if, чтобы сравнить значение guess (число, которое ввёл пользователь) со значением number (число, которое загадал компьютер). Если пользователь угадал загаданное число, программа переходит к выражению break, чтобы прервать цикл.

Программа готова к работе. Сохраните и запустите её:

python guess.py

Программа работает, но не сообщает пользователю никаких результатов: пользователь не знает, угадал он число или нет. На данный момент вывод программы выглядит так:

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))

Теперь программа сообщит пользователю, угадал он число или нет, но это произойдёт только после того, как он потратит все попытки.

Чтобы исправить это, добавьте ещё несколько условных выражений, теперь в тело цикла 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:
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, а пользователь ввёл 19, программа подскажет, что введённое число больше загаданного.

Эту игру можно усовершенствовать, например, добавить обработку ошибок.

Заключение

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

Читайте также:

Tags: ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>