Ввод и вывод

У нас часто возникает необходимость взаимодействовать с пользователями: получать от них данные или предоставлять им какой-либо результат. Большинство программ в наши дни использует диалоговые окна в качестве способа запроса у пользователя каких-либо входных данных. Хотя Python умеет создавать такие окна, мы будем использовать более простой способ. Python предоставляет нам функцию, позволяющую просить пользователя ввести какую-то информацию и возвращать ему ссылку на данные в строковом формате. Эта функция называется input.

Она принимает в качестве своего единственного параметра строку, которую часто называют “приглашением ввода”, поскольку она содержит вспомогательную текстовую подсказку для пользователя о том, что ему надо ввести. Например, вы можете вызвать input следующим образом:

aName = input('Please enter your name: ')

Теперь, что бы пользователь ни написал после приглашения, оно будет сохранено в переменной aName. Используя функцию ввода, мы легко можем писать инструкции, которые будут подсказывать пользователю какие данные вводить и включать их в дальнейшую обработку. Например, в следующих двух строках в первой у пользователя спрашивается его имя, а вторая печатает результат простейшей обработки полученной строки.




Функция input возвращает строку (strstuff)

Очень важно обратить внимание на то, что значение, возвращаемое 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 суммирует информацию обо всех возможных видах спецификаторов.

В дополнение к символу форматирования вы также можете включать модификатор формата между % и символом форматирования. Модификаторы формата могут использоваться для задания левому или правому краю значения определённой длины. Также их можно использовать, чтобы задать ширину поля вместе с количеством цифр после запятой. Таблица 10 объясняет, как это работает.

Таблица 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.

Next Section - Управляющие структуры