Книга «Изучаем Python»



Pdf көрінісі
бет72/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   68   69   70   71   72   73   74   75   ...   238
Байланысты:
2 5343781172763690906

УПРАЖНЕНИЯ

7-1 . Прокат машин: напишите программу, которая спрашивает у пользователя, какую ма-

шину он хотел бы взять напрокат . Выведите сообщение с введенными данными (например, 

“Let me see if I can find you a Subaru”) .

7-2 .  Заказ  стола:  напишите  программу,  которая  спрашивает  у  пользователя,  на  сколько 

мест он хочет забронировать стол в ресторане . Если введенное число больше 8, выведите 

сообщение о том, что пользователю придется подождать . В противном случае сообщите, 

что стол готов .

7-3 . Числа, кратные 10: запросите у пользователя число и сообщите, кратно оно 10 или нет .

Циклы while

Цикл 


for

 получает коллекцию элементов и выполняет блок кода по одному разу 

для каждого элемента в коллекции. В отличие от него, цикл 

while


 продолжает вы-

полняться, пока остается истинным некоторое условие.

Цикл while в действии

Цикл 


while

 может использоваться для перебора числовой последовательности. 

Например, следующий цикл считает от 1 до 5:

counting.py

current_number = 1

while current_number <= 5:

    print(current_number)

    current_number += 1

В первой строке отсчет начинается с 1, для чего 

current_number

 присваивается 

значение 1. Далее запускается цикл 

while


, который продолжает работать, пока 

значение 

current_number

 остается меньшим или равным 5. Код в цикле выводит 

значение 

current_number

 и увеличивает его на 1 командой 

current_number += 1

(Оператор 



+=

 является сокращенной формой записи для 

current_number

 

=



 

current_number

 

+

 



1

.)

Цикл повторяется, пока условие 



current_number

 

<=

 

5

 остается истинным. Так как 



1 меньше 5, Python выводит 1, а затем увеличивает значение на 1, отчего 

current_


number

 становится равным 2. Так как 2 меньше 5, Python выводит 2 и снова при-




Циклы while    125

бавляет 1 и т. д. Как только значение 

current_number

 превысит 5, цикл останавли-

вается, а программа завершается:

1

2



3

4

5



Очень многие повседневные программы содержат циклы 

while


. Например, 

представьте компьютерную игру: цикл 

while

 выполняется, пока игра про-



должается, и завершается, как только игрок захочет остановить игру. Вряд ли 

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

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

while


 

весьма полезны.

Пользователь решает прервать работу программы

Программа 

parrot .py

 может выполняться, пока пользователь не захочет остановить 

ее, — для этого бульшая часть кода заключается в цикл 

while


. В программе опре-

деляется признак завершения, и программа работает, пока пользователь не введет 

нужное значение:

parrot.py

prompt = "\nTell me something, and I will repeat it back to you:"



prompt += "\nEnter 'quit' to end the program. "

message = ""



while message != 'quit':

    message = input(prompt)

    print(message)

В точке  определяется сообщение, которое объясняет, что у пользователя есть 

два варианта: ввести сообщение или ввести признак завершения (в данном случае 

это строка 

'quit'


). Затем переменной 

message


  присваивается значение, введен-

ное пользователем. В программе переменная 

message

 инициализируется пустой 

строкой 

""

, чтобы значение проверялось без ошибок при первом выполнении 



строки 

while


. Когда программа только запускается и выполнение достигает ко-

манды 


while

, значение 

message

 необходимо сравнить с 

'quit'

, но пользователь еще 



не вводил  никакие данные. Если у Python нет данных для сравнения, продолжение 

выполнения становится невозможным. Чтобы решить эту проблему, необходимо 

предоставить 

message


 исходное значение. И хотя это всего лишь пустая строка, для 

Python такое значение выглядит вполне осмысленно; программа сможет выполнить 

сравнение, на котором основана работа цикла 

while


. Цикл 

while


  выполняется, 

пока значение 

message

 не равно 

'quit'

.

При первом выполнении цикла 



message

 содержит пустую строку, и Python входит 

в цикл. При выполнении команды 

message


 

=

 



input(prompt)

 Python отображает 

подсказку и ожидает, пока пользователь введет данные. Эти данные сохраняются 

в 

message



 и выводятся командой 

print


; после этого Python снова проверяет усло-

вие команды 

while

. Пока пользователь не введет слово 



'quit'

, приглашение будет 




126    Глава 7  •  Ввод данных и циклы while

выводиться снова и снова, а Python будет ожидать новых данных. При вводе слова 

'quit'

 Python перестает выполнять цикл 



while

, а программа завершается:

Tell me something, and I will repeat it back to you: 

Enter 'quit' to end the program. Hello everyone!

Hello everyone!

Tell me something, and I will repeat it back to you: 

Enter 'quit' to end the program. Hello again.

Hello again.

Tell me something, and I will repeat it back to you: 

Enter 'quit' to end the program. quit

quit

Программа работает неплохо, если не считать того, что она выводит слово 



'quit'

словно оно является обычным сообщением. Простая проверка 



if

 решает про-

блему:

prompt = "\nTell me something, and I will repeat it back to you:"



prompt += "\nEnter 'quit' to end the program. "

message = ""

while message != 'quit':

message = input(prompt)

    

    if message != 'quit':



print(message)

Теперь программа проводит проверку перед выводом сообщения и выводит со-

общение только в том случае, если оно не совпадает с признаком завершения:

Tell me something, and I will repeat it back to you: 

Enter 'quit' to end the program. Hello everyone!

Hello everyone!

Tell me something, and I will repeat it back to you: 

Enter 'quit' to end the program. Hello again.

Hello again. 

Tell me something, and I will repeat it back to you: 

Enter 'quit' to end the program. quit

Флаги


В предыдущем примере программа выполняла некоторые операции, пока заданное 

условие оставалось истинным. А что если вы пишете более сложную программу, 

выполнение которой может прерываться по нескольким разным условиям?

Например, компьютерная игра может завершаться по разным причинам: у игро-

ка кончились все «жизни»; прошло отведенное время; все города, которые он 

должен был защищать, были уничтожены и т. д. Игра должна завершаться 

при выполнении любого из этих условий. Попытки проверять все возможные 

условия в одной команде 

while

 быстро усложняются и становятся слишком 



громоздкими.


Циклы while    127

Если программа должна выполняться только при истинности нескольких условий, 

определите одну переменную-флаг. Эта переменная сообщает, должна ли програм-

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

выполнение, если флаг находится в состоянии 

True


, и завершалась, если любое 

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

False

. В результате в команде 



while

 достаточно проверить всего одно условие: находится ли флаг в состоянии 

True

. Все остальные проверки (которые должны определить, произошло ли собы-



тие, переводящее флаг в состояние 

False


) удобно организуются в остальном коде.

Добавим флаг в программу 

parrot .py

 из предыдущего раздела. Этот флаг, который 

мы назовем 

active


 (хотя переменная может называться как угодно), управляет тем, 

должно ли продолжаться выполнение программы:

prompt = "\nTell me something, and I will repeat it back to you:"

prompt += "\nEnter 'quit' to end the program. "

  



active = True



while active:

    message = input(prompt)

    


    if message == 'quit':

        active = False

    else:



        print(message)

В точке  переменной 

active

 присваивается 



True

, чтобы программа начинала 

работу в активном состоянии. Это присваивание упрощает команду 

while


, потому 

что в самой команде 

while

 никакие сравнения не выполняются; вся логика реали-



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

active


 остается равной 

True


цикл выполняется.

В команде 

if

 внутри цикла 



while

 значение 

message

 проверяется после того, как 

пользователь введет данные. Если пользователь ввел строку 

'quit'


 , флаг 

active


 

переходит в состояние 

False

, а цикл 



while

 останавливается. Если пользователь ввел 

любой текст, кроме 

'quit'


 , то введенные им данные выводятся как сообщение.

Результаты работы этой программы ничем не отличаются от предыдущего приме-

ра, в котором условная проверка выполняется прямо в команде 

while


. Но теперь 

в программе имеется флаг, указывающий, находится ли она в активном состоянии, 

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

elif


) для событий, 

с которыми переменная 

active

 может перейти в состояние 



False

. Это может быть 

удобно в сложных программах — например, в компьютерных играх с многочислен-

ными событиями, каждое из которых может привести к завершению программы. 

Когда по любому из этих событий флаг 

active


 переходит в состояние 

False


, основ-

ной игровой цикл прервется, выводится сообщение о завершении игры, и у игрока 

появляется возможность сыграть еще раз.

Команда break и выход из цикла

Чтобы немедленно прервать цикл 

while


 без выполнения оставшегося кода в цикле 

независимо от состояния условия, используйте команду 

break

. Команда 



break

 



128    Глава 7  •  Ввод данных и циклы while

управляет ходом выполнения программы; она позволит вам управлять тем, какая 

часть кода выполняется, а какая нет.

Рассмотрим пример — программу, которая спрашивает у пользователя, в каких го-

родах он бывал. Чтобы прервать цикл 

while


, программа выполняет команду 

break


как только пользователь введет значение 

'quit'

:



Достарыңызбен бөлісу:
1   ...   68   69   70   71   72   73   74   75   ...   238




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет