На этом занятии
мы подробнее поговорим, как в Python можно
формировать строки на основе набора различных переменных и даже функций. Мы уже
знаем с вами как создавать строки и соединять их между собой. Предположим, у
нас есть две переменные:
и мы формируем
такое сообщение:
"Меня зовут "+name+", мне "+str(age)+" и я люблю язык Python."
На выходе
получим:
'Меня зовут
Федор, мне 18 и я люблю язык Python.'
Но это не самый
удобный и распространенный способ формирования строк в Python. Гораздо
удобнее использовать специальный метод строки
str.format(*args)
который в данном
конкретном случае можно использовать так:
"Меня зовут {0}, мне {1} и я люблю язык Python.".format(name, age)
Смотрите, здесь
в фигурных скобках мы указываем индекс переменной, значение которой будет
подставлено в это место строки. Индекс 0 – первая переменная, указанная в
методе format, т.е. name, а индекс 1 –
вторая переменная age. То есть, метод формат возвращает новую строку в
заданном формате. И чтобы сохранить этот результат в какой-либо переменной,
следует записать так:
msg = "Меня зовут {0}, мне {1} и я люблю язык Python.".format(name, age)
Теперь msg ссылается на
созданную строку.
Также мы можем
одну и ту же переменную указывать несколько раз, например, так:
"Меня зовут {0}, мне {1} и я люблю язык Python. {0}".format(name, age)
Как видите, это
удобнее обычной конкатенации строк. Но эту запись можно сделать еще понятнее,
используя именованные параметры. Для этого у каждой переменной пропишем ее имя
(ключ). Оно придумывается программистом, например:
format(fio=name, old=age)
и, далее, в
формате строки указываются уже эти имена:
"Меня зовут {fio}, мне {old} и я люблю язык Python. {fio}".format(fio=name, old=age)
Смотрите, как
это нагляднее и понятнее. Теперь, глядя на эту строку, мы легко понимаем что и
где будет записано. Конечно, если будет указано неверное имя, например, так:
"Меня зовут {name}, мне {old} и я люблю язык Python. {fio}".format(fio=name, old=age)
То возникнет
ошибка, говорящая, что ключа name не существует. То есть, в фигурных
скобках указывается именно ключ, а не переменная. И, кроме того, благодаря
использованию ключей, мы можем записывать переменные в методе format в любом
порядке. Например, поменяем их местами:
"Меня зовут {fio}, мне {old} и я люблю язык Python. {fio}".format(old=age, fio=name)
На выходе получим то же самое.
F-строки
Начиная с версии
Python 3.6, появился
еще один способ форматирования строк, так называемые, F-строки. И во
многих случаях он еще более удобный, чем использование метода format. Здесь мы
рассмотрим лишь основы использования этого подхода (F-строк), для
более глубокого изучения можно обратиться к стандарту PEP498 документации Python:
https://www.python.org/dev/peps/pep-0498.
Итак, чтобы
указать Python на
использование механизма F-строк, перед ее литералом ставится
символ ‘f’ (именно малая
буква), а в фигурных скобках записывать непосредственно имена переменных:
f"Меня зовут {name}, мне {age} и я люблю язык Python."
Видите как это
удобно? Или, присваивая результат переменной:
msg = f"Меня зовут {name}, мне {age} и я люблю язык Python."
Можем в
дальнейшим оперировать им через переменную msg. Далее, внутри
фигурных скобок F-строк в действительности можно записывать любые
конструкции языка Python, например, арифметические операции и
операции со строками:
f"Меня зовут {name.upper()}, мне {age*2} и я люблю язык Python."
В результате,
получим:
'Меня зовут ФЕДОР, мне 36 и я люблю язык Python.'
Или даже не
прописывать переменные, а использовать обычные числовые операции или вызывать
отдельные функции:
f"Меня зовут {len(name)}, мне {14*2} и я люблю язык Python."
Соответственно,
можно использовать и свои функции в таких строках:
def f(n):
return n%2 == 0
name = "Иван"
age=18
msg = f"""Меня зовут {name}, мне {age}
и проверка возраста на четность
дает значение {f(age)}"""
print( msg )
Помимо отдельных
переменных, можно использовать любые типы данных: списки, кортежи, словари и
т.д. Например, вот так:
g = {"m": "Уважаемый", "w": "Уважаемая"}
ps = [("Иван Федорович", 18, "m"),
("Сергей Владимирович", 32, "m"),
("Дарья Ивановна", 22, "w"),
("Ксения Петровна", 25, "w")]
for p in ps:
msg = f"""{g[ p[2] ]}
{p[0]}! Поздравляем Вас
с {p[1]}-летием! Желаем
выучить язык Python"""
print( msg, end="\n\n" )
Здесь на выходе
будем получать строки с корректным обращением к тому или иному человеку и
поздравлять в соответствии с заданным шаблоном. Как видите, F-строки
предоставляют большую свободу действий и при этом просты в использовании.
Задания для самоподготовки
1. Пользователь
через пробел вводит ФИО. На основе этой информации требуется создать строку с
сообщением:
Ваши
персональные данные:
Фамилия:
введенная фамилия
Имя:
введенное имя
Отчество: введенное отчество
2. Имеется текстовый файл с содержимым:
Иван,
ivan@gm.com, 18
Татьяна,
tat@gm.com, 22
Сергей,
srg@ml.ru, 33
Федор,
fr@ml.ru, 41
Елена,
el@gm.com, 27
Необходимо
построчно считывать информацию и для каждой строки для лиц не старше 30 лет
сформировать сообщение:
Уважаемый(ая) <имя>!
Приглашаем Вас принять участие в курсах по изучению Python. Подробную
информацию мы выслали на email: <email>.