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



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

ПРИМЕЧАНИЕ

В некоторых редакторах — например, в Sublime Text — используется встроенное окно вывода . Оно 

может усложнить прерывание бесконечных циклов; возможно, для выхода из цикла придется за-

крыть редактор .

УПРАЖНЕНИЯ

7-4 . Дополнения для пиццы: напишите цикл, который предлагает пользователю вводить 

дополнения для пиццы до тех пор, пока не будет введено значение 'quit’ . При вводе каждо-

го дополнения выведите сообщение о том, что это дополнение включено в заказ .

7-5 . Билеты в кино: кинотеатр установил несколько вариантов цены на билеты в зависимо-

сти от возраста посетителя . Для посетителей младше 3 лет билет бесплатный; в возрасте 

от 3 до 12 билет стоит $10; наконец, если возраст посетителя больше 12, билет стоит $15 . 

Напишите цикл, который предлагает пользователю ввести возраст и выводит цену билета .

7-6 . Три выхода: напишите альтернативную версию упражнения 7-4 или упражнения 7-5, 

в которой каждый пункт следующего списка встречается хотя бы один раз .

•  Завершение цикла по проверке условия в команде while .

•  Управление  продолжительностью  выполнения  цикла  в  зависимости  от  переменной 

active .

•  Выход из цикла по команде break, если пользователь вводит значение ‘quit’ .

7-7 . Бесконечный цикл: напишите цикл, который никогда не завершается, и выполните его . 

(Чтобы выйти из цикла, нажмите Ctrl+C или закройте окно с выводом .)

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

До настоящего момента мы работали только с одним фрагментом информации, 

полученной от пользователя. Мы получали ввод пользователя, а затем выводили 

ответ на него. При следующем проходе цикла 

while

 программа получала новое 



входное значение и реагировала на него. Но, чтобы работать с несколькими 

фрагментами информации, необходимо использовать в циклах 

while

 списки 


и словари.

Цикл 


for

 хорошо подходит для перебора списков, но, скорее всего, список не дол-

жен изменяться в цикле, потому что у Python возникнут проблемы с отслежива-

нием элементов. Чтобы изменять список в процессе обработки, используйте цикл 

while

. Использование циклов 



while

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

хранить и упорядочивать большие объемы данных для последующего анализа 

и обработки.

Возьмем список недавно зарегистрированных, но еще не проверенных пользова-

телей сайта. Как переместить пользователей после проверки в отдельный список 




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

проверенных пользователей? Одно из возможных решений: используем цикл 

while

 

для извлечения пользователей из списка непроверенных, проверяем их и включаем 



в отдельный список проверенных пользователей. Код может выглядеть так:

confirmed_users.py

# Начинаем с двух списков: пользователей для проверки

#  и пустого списка для хранения проверенных пользователей.

unconfirmed_users = ['alice', 'brian', 'candace']



confirmed_users = []

# Проверяем каждого пользователя, пока остаются непроверенные

#  пользователи. Каждый пользователь, прошедший проверку,

#  перемещается в список проверенных.

while unconfirmed_users:



    current_user = unconfirmed_users.pop()

    

    print("Verifying user: " + current_user.title())



    confirmed_users.append(current_user)

# Вывод всех проверенных пользователей.

print("\nThe following users have been confirmed:")

for confirmed_user in confirmed_users:

    print(confirmed_user.title())

Работа программы начинается с двух списков: непроверенных пользователей  

и пустого списка для проверенных пользователей. Цикл 

while

 в точке  выпол-



няется, пока в списке 

unconfirmed_users

 остаются элементы. Внутри этого списка 

функция 


pop()

 в точке  извлекает очередного непроверенного пользователя 

с конца списка 

unconfirmed_users

. В данном примере список 

unconfirmed_users

 

завершается пользователем 



Candace

; это имя первым извлекается из списка, со-

храняется в 

current_user

 и добавляется в список 

confirmed_users

 в точке . Далее 

следуют пользователи 

Brian

 и 


Alice

.

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



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

непроверенных пользователей список проверенных пользователей растет. Когда 

в списке непроверенных пользователей не остается ни одного элемента, цикл оста-

навливается, и выводится список проверенных пользователей:

Verifying user: Candace 

Verifying user: Brian 

Verifying user: Alice 

The following users have been confirmed: 

Candace 

Brian 


Alice

Удаление всех вхождений конкретного значения из списка

В главе 3 функция 

remove()


 использовалась для удаления конкретного значения 

из списка. Функция 

remove()

 работала, потому что интересующее нас значение 




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

встречалось в списке только один раз. Но что если вы захотите удалить все вхож-

дения значения из списка?

Допустим, имеется список 

pets

, в котором значение 



'cat'

 встречается многократно. 

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

while


 до 

тех пор, пока в списке не останется ни одного экземпляра 

'cat'

:

pets.py



pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']

print(pets)

while 'cat' in pets:

    pets.remove('cat')

    

print(pets)



Программа начинает со списка, содержащего множественные экземпляры 

'cat'


После вывода списка Python входит в цикл 

while

, потому что значение 



'cat'

 при-


сутствует в списке хотя бы в одном экземпляре. После входа цикл Python удаляет 

первое вхождение 

'cat'

, возвращается к строке 



while

, а затем обнаруживает, что 

экземпляры 

'cat'


 все еще присутствуют в списке, и проходит цикл заново. Вхож-

дения 


'cat'

 удаляются до тех пор, пока не окажется, что в списке значений 

'cat'

 

не осталось; в этот момент Python завершает цикл и выводит список заново:



['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat'] 

['dog', 'dog', 'goldfish', 'rabbit']

Заполнение словаря данными, введенными пользователем

При каждом проходе цикла 

while

 ваша программа может запрашивать любое 



необходимое количество данных. Напишем программу, которая при каждом про-

ходе цикла запрашивает имя участника и его ответ. Собранные данные будут со-

храняться в словаре, потому что каждый ответ должен быть связан с конкретным 

пользователем:





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




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

    Басты бет