Ввод и вывод¶
У нас часто возникает необходимость взаимодействовать с пользователями: получать от них данные или предоставлять им какой-либо результат. Большинство программ в наши дни использует диалоговые окна в качестве способа запроса у клиента каких-либо входных данных. Хотя Python умеет создавать такие окна, мы будем использовать более простой способ. Python предоставляет нам функцию, позволяющую просить пользователя ввести какую-то информацию и возвращать ему ссылку на данные в строковом формате. Эта функция называется input.
Она принимает в качестве своего единственного параметра строку, которую часто называют “приглашением ввода”, поскольку она содержит вспомогательную текстовую подсказку для пользователя о том, что ему надо ввести. Например, вы можете вызвать input следующим образом:
aName = input('Please enter your name: ')
Теперь, что бы пользователь ни написал после приглашения, оно будет сохранено в переменной aName. Используя функцию ввода, мы легко можем писать инструкции, которые будут подсказывать, какие данные вводить, и включать их в дальнейшую обработку. Например, в следующих двух строках в первой у пользователя спрашивается его имя, а вторая печатает результат простейшей обработки полученной строки.
Очень важно обратить внимание на то, что значение, возвращаемое input, представляет собой строку, состоящую из точно тех символов, которые были введены после приглашения. Если вы хотите, чтобы она интерпретировалась как другой тип, то вам следует осуществить явное преобразование типов. В коде ниже строка, введённая пользователем, преобразовывается в число с плавающей запятой, что может быть использовано в дальнейших арифметических вычислениях.
sradius = input("Please enter the radius of the circle ")
radius = float(sradius)
diameter = 2 * radius
Форматирование строки¶
Мы уже видели, что функция print предоставляет очень простой способ для вывода значений в программе на Python. Она принимает нуль или более параметров и выводит их, используя пробелы в качестве разделителей по умолчанию. Символ разделителя можно изменить по своему вкусу, установив аргумент sep. Так же каждый вывод print заканчивается автоматическим переходом на новую строку. Это поведение можно изменить, задав аргумент end. Оба этих варианта продемонстрированы в коде ниже:
>>> print("Hello")
Hello
>>> print("Hello","World")
Hello World
>>> print("Hello","World", sep="***")
Hello***World
>>> print("Hello","World", end="***")
Hello World***>>>
Часто бывает полезно иметь больше способов управления внешним видом вашего вывода. К счастью, Python предоставляет нам альтернативу под названием “форматированная строка”. Она представляет из себя шаблон, содержащий слова и пробелы, остающиеся неизменными, и заменители для переменных, которые будут подставлены в строку. Например, следующий код
print(aName, "is", age, "years old.")
содержит слова is и years old, но имя и возраст будут меняться в зависимости от значений переменных во время выполнения программы. Используя форматирование строк, мы можем записать этот код как
print("%s is %d years old." % (aName, age))
Этот простой пример наглядно иллюстрирует новой выражение для строк. % является строковым оператором и называется “оператор форматирования”. Левая часть выражения содержит шаблон или строку формата, а правая - коллекцию значений, которые будут в неё подставлены. Заметьте, что число значений в правой коллекции равно количеству символов % в строке форматирования. Эти значения будут по порядку (слева направо) извлекаться из коллекции и подставляться в строку форматирования.
Давайте рассмотрим обе части выражения для форматирования более детально. Строка форматирования может содержать один или более спецификаторов преобразования. Символ преобразования говорит оператору форматирования о типе значения, которое будет подставлено в эту позицию. В примере выше %s означает строку, в то время как %d - целое число. Другие возможные типы спецификаторов включают i, u, f, e, g, c или %. Таблица 9 суммирует информацию обо всех возможных видах спецификаторов.
Символ | Формат вывода |
---|---|
d, i | Целое |
u | Беззнаковое целое |
f | Вещественное с плавающей запятой в формате m.ddddd |
e | Вещественное с плавающей запятой в формате m.ddddde+/-xx |
E | Вещественное с плавающей запятой в формате m.dddddE+/-xx |
g | Использует %e для степеней меньше -4 и больше +5. В остальных случаях работает как %f |
c | Одиночный символ |
s | Строка или любой объект данных Python, который может быть конвертирован в строку с помощью функции str |
% | Вставляет символ % |
В дополнение к символу форматирования вы также можете включать модификатор формата между % и символом форматирования. Модификаторы формата могут использоваться для задания левому или правому краю значения определённой длины. Также их можно использовать, чтобы задать ширину поля вместе с количеством цифр после запятой. Таблица 10 объясняет, как это работает.
Модификатор | Описание | Пример |
---|---|---|
number | %20d | Помещает значение в поле шириной 20 символов |
- | %-20d | Помещает значение в поле шириной 20 символов выровненным по левому краю |
+ | %+20d | Помещает значение в поле шириной 20 символов выровненным по правому краю |
0 | %020d | Помещает значение в поле шириной 20 символов, изначально заполненное нулями |
. | %20.2f | Помещает значение в поле шириной 20 символов с двумя символами справа от десятичной точки |
(name) | %(name)d | Берёт значение из прилагаемого словаря, используя name в качестве ключа |
Правая часть оператора форматирования представляет собой коллекцию значений, которые будут подставлены в строку форматирования. Такой коллекцией могут быть кортеж или словарь. Если коллекция - кортеж, то значения вставляются по порядку. Т.е. первый элемент кортежа соответствует первому символу форматирования в строке формата. Если коллекция - словарь, то значения вставляются в соответствии с их ключами. В этом случае все символы форматирования должны использовать модификатор (name), определяющий имя ключа.
>>> price = 24
>>> item = "banana"
>>> print("The %s costs %d cents"%(item,price))
The banana costs 24 cents
>>> print("The %+10s costs %5.2f cents"%(item,price))
The banana costs 24.00 cents
>>> print("The %+10s costs %10.2f cents"%(item,price))
The banana costs 24.00 cents
>>> itemdict = {"item":"banana","cost":24}
>>> print("The %(item)s costs %(cost)7.1f cents"%itemdict)
The banana costs 24.0 cents
>>>
В дополнение к строкам форматирования, использующим символы и модификаторы форматирования, тип string в Python также имеет метод format, который может использоваться совместно с новым классом Formatter для сложного строкового форматирования. Больше об этих особенностях вы сможете найти по ссылке на руководство для библиотек Python.