Использование функции в цикле while

We use cookies. Read the Privacy and Cookie Policy

Функции могут использоваться со всеми структурами Python, уже известными вам. Например, используем функцию get_formatted_name() в цикле while, чтобы поприветствовать пользователей более официально. Первая версия программы, приветствующей пользователей по имени и фамилии, может выглядеть так:

greeter.py

def get_formatted_name(first_name, last_name):

. ."""Возвращает аккуратно отформатированное полное имя."""

. .full_name = first_name + ' ' + last_name

. .return full_name.title()

# Бесконечный цикл!

while True:

(1) . .print(" Please tell me your name:")

. .f_name = input("First name: ")

. .l_name = input("Last name: ")

. .

. .formatted_name = get_formatted_name(f_name, l_name)

. .print(" Hello, " + formatted_name + "!")

В этом примере используется простая версия get_formatted_name(), без вторых имен. В цикле while (1) имя и фамилия пользователя запрашиваются по отдельности.

Но у этого цикла while есть один недостаток: в нем не определено условие завершения. Где следует разместить условие завершения при запросе серии данных? Пользователю нужно предоставить возможность выйти из цикла как можно раньше, так что в приглашении должен содержаться способ завершения. Команда break позволяет немедленно прервать цикл при запросе любого из компонентов:

def get_formatted_name(first_name, last_name):

. ."""Возвращает аккуратно отформатированное полное имя."""

. .full_name = first_name + ' ' + last_name

. .return full_name.title()

while True:

. .print(" Please tell me your name:")

. .print("(enter 'q' at any time to quit)")

. .

. .f_name = input("First name: ")

. .if f_name == 'q':

. . . .break

. . . .

. .l_name = input("Last name: ")

. .if l_name == 'q':

. . . .break

. .

. .formatted_name = get_formatted_name(f_name, l_name)

. .print(" Hello, " + formatted_name + "!")

В программу добавляется сообщение, которое объясняет пользователю, как завершить ввод данных, и при вводе признака завершения в любом из приглашений цикл прерывается. Теперь программа будет приветствовать пользователя до тех пор, пока вместо имени или фамилии не будет введен символ 'q':

Please tell me your name:

(enter 'q' at any time to quit)

First name: eric

Last name: matthes

Hello, Eric Matthes!

Please tell me your name:

(enter 'q' at any time to quit)

First name: q

Упражнения

8-6. Названия городов: напишите функцию city_country(), которая получает название города и страну. Функция должна возвращать строку в формате “Santiago, Chile”. Вызовите свою функцию по крайней мере для трех пар «город—страна» и выведите возвращенное значение.

8-7. Альбом: напишите функцию make_album(), которая строит словарь с описанием музыкального альбома. Функция должна получать имя исполнителя и название альбома и возвращать словарь, содержащий эти два вида информации. Используйте функцию для создания трех словарей, представляющих разные альбомы. Выведите все возвращаемые значения, чтобы показать, что информация правильно сохраняется во всех трех словарях.

Добавьте в make_album() дополнительный параметр для сохранения количества дорожек в альбоме. Если в строку вызова включено значение количества дорожек, добавьте это значение в словарь альбома. Создайте как минимум один новый вызов функции с передачей количества дорожек в альбоме.

8-8. Пользовательские альбомы: начните с программы из упражнения 8-7. Напишите цикл while, в котором пользователь вводит исполнителя и название альбома. Затем в цикле вызывается функция make_album() для введенных пользователей и выводится созданный словарь. Не забудьте предусмотреть признак завершения в цикле while.