Какая функция выводит что либо в консоль python
Ознакомить пользователя с выводом программы можно различными способами — данные могут быть выведены в читаемом виде или записаны в файл для последующего использования. Часть возможностей будет обсуждена в этой главе.
7.1. Удобное форматирование вывода¶
На данный момент мы выяснили два способа вывода значений: операторы выражения и функция print() . (Третий способ — использование метода write() объектов файлов; на файл стандартного вывода можно сослаться как на sys.stdout . Более подробную информацию по этому пункту смотрите в Справочнике по библиотеке.)
Часто требуется больше контроля над форматированием выходных данных, чем просто печать разделенных пробелом значений. Существует несколько способов форматирования выходных данных.
Чтобы использовать форматированные строковые литералы , начните строку с f или F перед открывающей кавычкой или тройной кавычкой. Внутри этого строки можно записать Python выражение между символами < и >, которое может ссылаться на переменные или литеральные значения.
Метод str.format() строки требует больших ручных усилий. Вы по-прежнему будете использовать < и >, чтобы отметить, где переменная будет заменена, и можете предоставить подробные директивы форматирования, но вам также потребуется предоставить информацию для форматирования.
Наконец, можно выполнить всю обработку строки самостоятельно, используя операции слайсинга и конкатенации строки для создания любого макета, который вы можете себе представить. Тип строки имеет несколько методов, которые выполняют полезные операции для заполнения строки заданной ширины столбца.
Если вам не нужны вычурные выходные данные, а просто требуется быстрое отображение некоторых переменных для отладки, вы можете преобразовать любое значение в строку функциями repr() или str() .
Предназначение функции str() — возврат значений в довольно-таки читабельной форме; в отличие от repr() , чьё назначение — генерирование форм, которые могут быть прочитаны интерпретатором (или вызовут ошибку SyntaxError , если эквивалентного синтаксиса не существует). Для тех объектов, у которых нет формы для человеческого прочтения функция str() возвратит такое же значение, как и repr() . У многих значений, таких как числа или структуры, вроде списков и словарей, одинаковая форма для обеих функций. Строки и числа с плавающей точкой, в частности, имеют по две разных формы.
Модуль string содержит класс Template , который предлагает еще один способ замены значения на строки, используя такие местозаполнители, как $x и заменяя их значения из словаря, но предлагает гораздо меньше возможностей по управлению форматированием.
7.1.1. Форматирующие строковые литералы¶
Форматированные строковые литералы (также называемые f-строками для краткости) позволяет включить значение Python выражений в строку префикса строки с f или F и запись выражений как .
За выражением может следовать необязательный спецификатор формата. Это позволяет больше контролировать над форматированием значения. В следующем примере число pi округляется до три знака после запятой:
Передача целого числа после ':' приведет к тому, что это поле будет минимальным числом символов в ширину. Это полезно для выстраивания столбцов.:
Для преобразования значения перед форматированием можно использовать другие модификаторы. '!a' применяется ascii() , '!s' применяется str() и '!r' применяет repr() :
Для получения справки по этим спецификациям формата см. Справочное руководство по Спецификации формата Мини-языка .
7.1.2. Метод format() строки¶
Основное использование метода str.format() выглядит следующим образом:
Скобки и символы в них (называемые полями формата) заменяются объектами, передаваемыми в метод str.format() . Число в скобках можно использовать для обозначения положения объекта, передаваемого в метод str.format() .
Если ключевые аргументы используются в методе str.format() , на их значения ссылаются с помощью имени аргумента.
Позиционные и ключевые аргументы могут быть произвольно объединены:
Если у вас действительно длинная форматная строка которую вы не хотите разделять, было бы неплохо, если бы вы могли ссылаться на переменные, которые будут форматироваться по имени, а не по положению. Это можно сделать просто передав словарь и используя квадратные скобки '[]' для доступа к ключам.
Это также можно сделать, передав table в качестве ключевых аргументов с символом „**“ нотацией.
Это особенно полезно в сочетании со встроенной функцией vars() , которая возвращает словарь, содержащая все локальные переменные.
В качестве примера, следующие строки создают точно выровненный набор столбцов с целыми числами и их квадратами и кубами
Полный обзор форматирования строк с помощью str.format() см. в разделе Синтаксис строки формата .
7.1.3. Ручное форматирование строки¶
Вот та же таблица квадратов и кубов, отформатированная вручную:
(Обратите внимание, что в первом примере единичные пробелы между колонками добавлены функцией print() : она всегда вставляет пробелы между своими параметрами.)
Этот пример демонстрирует работу метода строковых объектов str.rjust() , выравнивающего строку по правому краю в поле переданной ширины, отступая пробелами слева. Имеются также похожие методы str.ljust() и str.center() . Эти методы не выводят ничего, они лишь возвращают новую строку. Если строка на входе чересчур длинная, то они не усекают её, а возвращают без изменения; это испортит вашу столбцовую разбивку, но обычно это лучше, чем альтернатива, которая бы наврала о значении. (Если вам действительно хочется сделать обрезку, то всегда можно добавить операцию слайса, например: x.ljust(n)[:n] .)
Есть другой метод — str.zfill() , который заполняет нулями пространство слева от числовой строки. Он распознаёт знаки плюс и минус:
7.1.4. Форматирование строк в старом стиле¶
Оператор % (по модулю) также может использоваться для форматирования строк. Учитывая 'string' % values , экземпляры % в string заменяются нулем или более элементов values . Эта операция обычно называется интерполяцией строк. Например:
Дополнительную информацию можно найти в разделе Форматирование строк в стиле printf .
7.2. Чтение и запись файлов¶
Функция open() возвращает файловый объект и чаще всего используется с двумя аргументами: open(filename, mode) .
Первый аргумент — это строка, содержащая имя файла. Второй — другая строка, содержащая несколько символов, описывающих способ использования файла. Значение параметра режим может быть символом 'r' если файл будет открыт только для чтения, 'w' открыт только для записи (существующий файл с таким же именем будет стёрт) и и 'a' файл открыт для добавления: любые данные, записанные в файл автоматически добавляются в конец. Аргумент режим необязателен: если он пропущен — предполагается, что он равен 'r' .
Обычно файлы открываются в текстовом режиме — это значит что вы читаете из файла и записываете в файл строки в определённой кодировке. Если кодировка не указана явно, то используется кодировка по умолчанию, которая зависит от платформы (см. open() ). Если добавить к режиму файла символ 'b' , файл открывается в двоичном режиме <двоичный режим>: теперь данные считываются и записываются в виде двоичных объектов. Этот режим следует использовать для всех файлов, которые не содержат текст.
При использовании текстового режима, все окончания строк, по умолчанию, специфичные для платформы ( \n в Unix, \r\n в Windows), усекаются до символа \n , при чтении из файла. При записи в текстовом режиме, по умолчанию вхождения \n конвертируются обратно в окончания строк, специфичные для платформы. Эти закулисные изменения в файловых данных корректно работают в случае текстовых файлов, но испортят двоичные данные в файлах вроде JPEG или EXE . Внимательно следите за тем, чтобы использовать двоичный режим при чтении и записи таких файлов.
Рекомендуется использовать with ключевой при работе с файловыми объектами. Преимущество заключается в том, что файл правильно закрывается после завершения работы набора, даже если в какой-то момент возникает исключение. Использование with также намного короче, чем запись эквивалентных блоков try - finally :
Если вы не используете ключевое слово with , то вам следует вызвать в f.close() , чтобы закрыть файл и немедленно освободить его любые системные ресурсы, используемые им.
Вызов f.write() без использования ключевого слова with или вызов f.close() может привести к аргументам f.write() не полностью записывается на диск, даже если программа успешно завершается.
После закрытия файлового объекта либо with оператор, либо путем вызова f.close() попытки использования файлового объекта автоматически завершатся неудачей.:
7.2.1. Методы файловых объектов¶
В примерах ниже подразумевается, что заранее создан файловый объект с именем f .
Чтобы прочитать содержимое файла, вызовите f.read(size) , который считывает некоторое количество данных и возвращает его как строку (в текстовом режиме) или байты (в двоичном режиме). size является необязательным числовым аргументом. Если size пропущен или отрицателен, все содержимое файла будет прочитано и возвращено; это ваша проблема, если размер файла в два раза превышает объем памяти компьютера. В противном случае считывается и возвращается не более size символов (в текстовом режиме) или size байт (в двоичном режиме). Если достигнут конец файла, f.read() возвращает пустую строку ( '' ):
f.readline() считывает одну строку из файла; символ новой строки ( \n ) остается в конце строки и пропускается только в последней строке файла, если файл не оканчивается на символ новой строки. Это делает возвращаемое значение однозначным; если f.readline() возвращает пустую строку, то достигнут конец файла, в то время как пустая строка представлена '\n' , строка, содержащая только один символ новой строк.:
Для чтения строк из файла можно выполнить цикл над объектом файла. Это эффективно, быстро и обеспечивает простой код:
Если требуется прочитать все строки файла в список, можно также использовать list(f) или f.readlines() .
f.write(string) записывает содержимое string в файл, возвращая количество записанных символов.:
Необходимо преобразовать другие типы объектов - либо в строку (в текстовом режиме) или байтовый объект (в двоичном режиме) - перед их записью:
f.tell() — возвращает целое число, дающее текущую позицию файлового объекта в файле представлен как количество байтов от начала файла в двоичном режиме и непрозрачный номер в текстовом режиме.
Чтобы изменить положение объекта файла, используйте f.seek(offset, whence) . Положение вычисляется на основе добавления offset к точке отсчета; точка отсчета выбирается аргументом whence. Значение 0 параметра whence отмеряет смещение от начала файла, 1 использует текущее положение файла, а 2 использует конец файла в качестве точки отсчета. whence может быть пропущен и по умолчанию равен 0, используя начало файла в качестве опорной точки.:
В текстовых файлах (открытые без b в строке режима), выполнять позиционирование позволяется только от начала файла (за исключением прокрутки в конец файла с использованием seek(0, 2) ), и только те значения offset допустимы, что возвращаются от f.tell() или ноль. Любые другие значения offset производят неопределенное поведение.
Файловые объекты имеют некоторые дополнительные методы, такие как isatty() и truncate() , которые реже используются; обратитесь к Справочнику по библиотеке для более полного обзора по файловым объектам.
7.2.2. Сохранение структурированных данных с помощью json ¶
Строки могут быть легко записаны и прочитаны из файла. Числа требуют немного большего усилия, потому что метод read() возвращает только строки, которые придется передать функции типа int() , которая принимает строку типа '123' и возвращает ее числовое значение 123. Если вы хотите сохранить более сложные типы данных типа списков и словарей, парсинг и сериализация вручную усложняется.
Вместо того, чтобы принуждать пользователей постоянно писать и отлаживать код для сохранения сложных типов данных в файлы, Python позволяет вам использовать популярный формат обмена данными, называемый JSON (Объектная нотация JavaScript). Стандартный модуль под названием json , может брать на входе иерархии данных Python-а, и преобразовывать их в строковые представления; этот процесс называется сериализация. Восстановление данных из строкового представления называется десериализация. Между сериализацией и десериализацией строка, представляющией объект, может быть сохранена в файле или в данных, или быть послана по сетевому соединению на некоторую удаленную машину.
Формат JSON часто используется современными приложениями для обмена данными. Многие программисты уже знакомы с ним, что делает его хорошим выбором ради совместимости.
Если у вас есть объект x , вы можете посмотреть его строковое представление с помощью простой строчки кода:
Другой вариант функции: dumps() , называемый: dump() , просто сериализует объект в текстовый файл . Таким образом, если f является текстовым файлом объект открыт для записи, мы можем сделать следующее:
Для повторного декодирования объекта, если f является открытым текстовым файлом , открытым для чтения:
Это простая техника сериализации может обрабатывать списки и словари, но сериализация проивольных экземпляров классов в JSON требует немного дополнительных усилий. Справка по модулю json содержит объяснение этого.
Мы уже встречались с функцией print() . Она отвечает за вывод данных, по-умолчанию на экран. Если код содержится в файле, то без нее не обойтись. В интерактивном режиме в ряде случаев можно обойтись без нее.
Ввод данных в программу и их вывод важны в программировании. Без ввода программы делали бы одно и то же, исключая случаи, когда в них самих генерируются случайные значения. Вывод позволяет увидеть, использовать, передать дальше результат работы программы.
Обычно требуется, чтобы программа обрабатывала какой-то диапазон различных входных данных, которые поступают в нее из внешних источников. В качестве последних могут выступать файлы, клавиатура, сеть, выходные данные из другой программы. В свою очередь вывод данных, например, возможен в файл, по сети, в базу данных, на принтер. Однако нередко информацию просто выводят на экран монитора.
Можно сказать, что программа – это открытая система, которая обменивается чем-либо с внешней для нее средой. Если живой организм в основном обменивается веществом и энергией, то программа – данными, информацией.
Вывод данных. Функция print()
Что такое функция в программировании, узнаем позже. Пока будем считать, что print() – это такая команда языка Python, которая выводит то, что в ее скобках на экран.
В скобках могут быть любые типы данных. Кроме того, количество данных может быть различным:
Можно передавать в функцию print() как непосредственно литералы (в данном случае "a:" и 1), так и переменные, вместо которых будут выведены их значения. Аргументы функции (то, что в скобках), разделяются между собой запятыми. В выводе вместо запятых значения разделены пробелом.
Если в скобках стоит выражение, то сначала оно выполняется, после чего print() уже выводит результат данного выражения:
В print() предусмотрены дополнительные параметры. Например, через параметр sep можно указать отличный от пробела разделитель строк:
Параметр end позволяет указывать, что делать, после вывода строки. По-умолчанию происходит переход на новую строку. Однако это действие можно отменить, указав любой другой символ или строку:
Обычно end используется не в интерактивном режиме, а в скриптах, когда несколько выводов подряд надо разделить не переходом на новую строку, а, скажем, запятыми. Сам переход на новую строку обозначается символом '\n'. Если присвоить это значение параметру end , то никаких изменений в работе функции print вы не увидите, так как это значение и так присвоено по-умолчанию:
Однако, если надо отступить на одну дополнительную строку после вывода, то можно сделать так:
В функцию print нередко передаются так называемые форматированные строки, хотя по смыслу их правильнее называть строки-шаблоны. Никакого отношения к самому print они не имеют. Когда такая строка находится в скобках print() , интерпретатор сначала согласно заданному в ней формату преобразует ее к обычной строке, после чего передает результат в print() .
Форматирование может выполняться в так называемом старом стиле или с помощью строкового метода format . Старый стиль также называют Си-стилем, так как он схож с тем, как происходит вывод на экран в языке C. Рассмотрим пример:
Здесь вместо трех комбинаций символов %s , %d , %f подставляются значения переменных pupil , old , grade . Буквы s , d , f обозначают типы данных – строку, целое число, вещественное число. Если бы требовалось подставить три строки, то во всех случаях использовалось бы сочетание %s .
Хотя в качестве значения переменной grade было указано число 9.2, на экран оно вывелось с дополнительными нулями. Чтобы указать, сколько требуется знаков после запятой, надо перед f поставить точку, после нее указать желаемое количество знаков в дробной части:
Теперь посмотрим на метод format() :
В строке в фигурных скобках указаны номера данных, которые будут сюда подставлены. Далее к строке применяется метод format() . В его скобках указываются сами данные (можно использовать переменные). На нулевое место подставится первый аргумент метода format() , на место с номером 1 – второй и т. д.
На самом деле возможности метода format() существенно шире, и для их изучения понадобился бы отдельный урок. Нам пока будет достаточно этого.
В новых релизах Питона появился третий способ создания форматированных строк – f-строки. Перед их открывающей кавычкой прописывается буква f. В самой строке внутри фигурных скобок записываются выражения на Python, которые исполняются, когда интерпретатор преобразует строку-шаблон в обычную.
В примере число 5 после переменной a обозначает количество знакомест, отводимых под вывод значения переменной. В выражении b + 0.2:.1f сначала выполняется сложение, после этого значение округляется до одного знака после запятой.
Ввод данных. Функция input()
За ввод в программу данных с клавиатуры в Python отвечает функция input . Когда вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После этого, когда он нажмет Enter, функция input() заберет введенный текст и передаст его программе, которая уже будет обрабатывать его согласно своим алгоритмам.
Если в интерактивном режиме ввести команду input() , то ничего интересного вы не увидите. Компьютер будет ждать, когда вы что-нибудь введете и нажмете Enter или просто нажмете Enter. Если вы что-то ввели, это сразу же отобразиться на экране:
Функция input() передает введенные данные в программу. Их можно присвоить переменной. В этом случае интерпретатор не выводит строку сразу же:
В данном случае строка сохраняется в переменной answer , и при желании мы можем вывести ее значение на экран:
При использовании функции print() кавычки в выводе опускаются:
Куда интересней использовать функцию input() в скриптах – файлах с кодом. Рассмотрим такую программу:
При запуске программы, компьютер ждет, когда будет введена сначала одна строка, потом вторая. Они будут присвоены переменным name_user и city_user . После этого значения этих переменных выводятся на экран с помощью форматированного вывода.
Вышеприведенный скрипт далек от совершенства. Откуда пользователю знать, что хочет от него программа? Чтобы не вводить человека в замешательство, для функции input предусмотрен специальный параметр-приглашение. Это приглашение выводится на экран при вызове input() . Усовершенствованная программа может выглядеть так:
Обратите внимание, что в программу поступает строка. Даже если ввести число, функция input() все равно вернет его строковое представление. Но что делать, если надо получить число? Ответ: использовать функции преобразования типов.
В данном случае с помощью функций int() и float() строковые значения переменных qty и price преобразуются соответственно в целое число и вещественное число. После этого новые численные значения присваиваются тем же переменным.
Программный код можно сократить, если преобразование типов выполнить в тех же строках кода, где вызывается функция input() :
Сначала выполняется функция input() . Она возвращает строку, которую функция int() или float() сразу преобразует в число. Только после этого происходит присваивание переменной, то есть она сразу получает численное значение.
Практическая работа
Напишите программу (файл user.py ), которая запрашивала бы у пользователя:
- его имя (например, "What is your name?")
- возраст ("How old are you?")
- место жительства ("Where are you live?")
После этого выводила бы три строки:
"This is имя "
"It is возраст "
"(S)he live in место_жительства "
Вместо имя , возраст , место_жительства должны быть данные, введенные пользователем. Примечание: можно писать фразы на русском языке, но если вы планируете стать профессиональным программистом, привыкайте к английскому.
Напишите программу (файл arithmetic.py ), которая предлагала бы пользователю решить пример 4 * 100 - 54. Потом выводила бы на экран правильный ответ и ответ пользователя. Подумайте, нужно ли здесь преобразовывать строку в число.
Запросите у пользователя четыре числа. Отдельно сложите первые два и отдельно вторые два. Разделите первую сумму на вторую. Выведите результат на экран так, чтобы ответ содержал две цифры после запятой.
Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса
В уроке рассмотрены основные способы ввода и вывода данных в Python с использованием консоли, и работа с файлами: открытие, закрытие, чтение и запись.
Рассмотрим основные способы использования данной функции.
По умолчанию, для разделения элементов в функции print используется пробел.
Для замены разделителя необходимо использовать параметр sep функции print.
В качестве конечного элемента выводимой строки, используется символ перевода строки.
Для его замены используется параметр end.
Для считывания вводимых с клавиатуры данных используется функция input().
Для сохранения данных в переменной используется следующий синтаксис.
Если считывается с клавиатуры целое число, то строку, получаемую с помощью функции input(), можно передать сразу в функцию int().
Для вывода строки-приглашения, используйте ее в качестве аргумента функции input().
Преобразование строки в список осуществляется с помощью метода split(), по умолчанию, в качестве разделителя, используется пробел.
Разделитель можно заменить, указав его в качестве аргумента метода split().
Для считывания списка чисел с одновременным приведением их к типу int можно воспользоваться вот такой конструкцией.
Открытие и закрытие файла
Для открытия файла используется функция open(), которая возвращает файловый объект. Наиболее часто используемый вид данной функции выглядит так open(имя_файла, режим_доступа).
Для указания режима доступа используется следующие символы:
По умолчанию файл открывается на чтение в текстовом режиме.
У файлового объекта есть следующие атрибуты.
Для закрытия файла используется метод close().
Чтение данных из файла
Чтение данных из файла осуществляется с помощью методов read(размер) и readline().
Метод read(размер) считывает из файла определенное количество символов, переданное в качестве аргумента. Если использовать этот метод без аргументов, то будет считан весь файл.
В качестве аргумента метода можно передать количество символом, которое нужно считать.
Метод readline() позволяет считать строку из открытого файла.
Построчное считывание можно организовать с помощью оператора for.
Запись данных в файл
Для записи данных файл используется метод write(строка), при успешной записи он вернет количество записанных символов.
Дополнительные методы для работы с файлами
Метод tell() возвращает текущую позицию “условного курсора” в файле. Например, если вы считали пять символов, то “курсор” будет установлен в позицию 5.
Метод seek(позиция) выставляет позицию в файле.
Хорошей практикой при работе с файлами является применение оператора with. При его использовании нет необходимости закрывать файл, при завершении работы с ним, эта операция будет выполнена автоматически.
P.S.
Python. Урок 12. Ввод-вывод данных. Работа с файлами : 2 комментария
В статье узнаем как в Python 3, с помощью встроенной функции print(), вывести текст на консоль. А для закрепления напишем небольшую программу.
Первая программа
По традиции первая программа должна выводить на экран консоли фразу “Hello World!”. Мы не будем отходить от традиции. Вот код этой программы:
Функция print() – это встроенная функция, то-есть она заранее определена. Используя Python 3 вы можете создавать и собственные функции.
Эта функция в качестве аргументов принимает строки и выводит их на консоль, или может сохранить их в файл. То есть мы попросили Python вывести на экран строку “Hello, World!”, что он и сделал:
Строка обязательно должна быть написана в кавычках!
Вывод нескольких строк
В предыдущем примере мы выводили только одну строку – “Hello, World!”. Но функция print() может принимать несколько аргументов и выводить несколько строк. Для этого строки разделяются с помощью запятой.
Вот пример кода:
А вот что делает этот код:
Необязательные параметры
Помимо строк функция print() может использовать необязательные параметры:
- sep – с помощью этого параметра вы можете указать разделитель строк. А по умолчанию в качестве разделителя используется пробел;
- end – этот параметр позволяет указать, что нужно добавить после последней строки. По умолчанию добавляется управляющий символ ‘\n’ (перевод строки);
- file – по умолчанию функция print() выводит строки на консоль, а с помощью этого параметра можно поместить строки в файл.
Параметр sep
Следующий код выводит две строки и разделяет их символом перевода строки:
Вот как это работает:
Параметр end
Если мы выводим две строки с помощью двух функций priint(), то они будут на разных строках. Это происходит потому что, по умолчанию, после каждой последней строки ставится знак перевода строки. Вот пример кода:
А вот его выполнение:
А теперь используем параметр end и укажем что в конце строки нужно добавлять пробел:
И выполним этот код:
Параметр file
По умолчанию функция print() выводит информацию на консоль. А используя параметр file, мы можем поместить вывод в файл.
Работать с файлами мы пока не умеем, но в коде я оставил комментарии которые должны помочь его понять:
А теперь посмотрим как это сработает:
При выполнении этого кода на экран консоли ничего не вывелось, так как текст был помещён вместо консоли в файл. Если файла нет, то он создастся. При этом файл не перезаписывается, а строка записывается в конец файла.
Вывод результатов арифметических операций
Функция print() позволяет в себя поместить другие функции или операторы. Например мы можем вывести результат арифметических операций:
Подробнее математические операции рассмотрим в отдельной статье.
Вывод значений переменных
Ну и конечно мы можем выводить значения переменных. Переменную, также как и операцию, не нужно брать в кавычки, вот пример кода:
Итоговый пример
И для закрепления материала давайте напишем и разберём такую программку:
Вот результат выполнения этой программы:
В официальной документации встроенная в Python функция print() описана здесь.
Читайте также: