Что будет выведено на экран в результате выполнения инструкции print

В статье узнаем как в Python 3, с помощью встроенной функции print(), вывести текст на консоль. А для закрепления напишем небольшую программу.

Первая программа

По традиции первая программа должна выводить на экран консоли фразу «Hello World!». Мы не будем отходить от традиции. Вот код этой программы:

print("Hello, World!")

Функция print() — это встроенная функция, то-есть она заранее определена. Используя Python 3 вы можете создавать и собственные функции.

Эта функция в качестве аргументов принимает строки и выводит их на консоль, или может сохранить их в файл. То есть мы попросили Python вывести на экран строку «Hello, World!», что он и сделал:

$ python3 hello.py 
Hello, World!

Строка обязательно должна быть написана в кавычках!

Вывод нескольких строк

В предыдущем примере мы выводили только одну строку — «Hello, World!». Но функция print() может принимать несколько аргументов и выводить несколько строк. Для этого строки разделяются с помощью запятой.

Вот пример кода:

print("Hello, World!", "Привет, Мир!")

А вот что делает этот код:

$ python3 hello.py 
Hello, World! Привет, Мир!

Необязательные параметры

Помимо строк функция print() может использовать необязательные параметры:

  • sep — с помощью этого параметра вы можете указать разделитель строк. А по умолчанию в качестве разделителя используется пробел;
  • end — этот параметр позволяет указать, что нужно добавить после последней строки. По умолчанию добавляется управляющий символ ‘\n’ (перевод строки);
  • file — по умолчанию функция print() выводит строки на консоль, а с помощью этого параметра можно поместить строки в файл.

Параметр sep

Следующий код выводит две строки и разделяет их символом перевода строки:

print("Hello, World!", "Привет, Мир!", sep='\n')

Вот как это работает:

$ python3 hello.py 
Hello, World!
Привет, Мир!

Параметр end

Если мы выводим две строки с помощью двух функций priint(), то они будут на разных строках. Это происходит потому что, по умолчанию, после каждой последней строки ставится знак перевода строки. Вот пример кода:

print("Меня зовут")
print("Александр")

А вот его выполнение:

$ python3 hello.py 
Меня зовут
Александр

А теперь используем параметр end и укажем что в конце строки нужно добавлять пробел:

print("Меня зовут", end=' ')
print("Александр")

И выполним этот код:

$ python3 hello.py 
Меня зовут Александр

Параметр file

По умолчанию функция print() выводит информацию на консоль. А используя параметр file, мы можем поместить вывод в файл.

Работать с файлами мы пока не умеем, но в коде я оставил комментарии которые должны помочь его понять:

file = open('print.txt','a+') # открываем файл
print("Hello, World!", file=file) # выполняем функцию print с сохранением в файл
file.close() # закрываем файл

А теперь посмотрим как это сработает:

$ python3 hello.py
$ cat print.txt 
Hello, World!

$ python3 hello.py 
$ cat print.txt 
Hello, World!
Hello, World!

При выполнении этого кода на экран консоли ничего не вывелось, так как текст был помещён вместо консоли в файл. Если файла нет, то он создастся. При этом файл не перезаписывается, а строка записывается в конец файла.

Вывод результатов арифметических операций

Функция print() позволяет в себя поместить другие функции или операторы. Например мы можем вывести результат арифметических операций:

print("5 + 2 =", 5+2)
print("7 + 4 =", 7+4)
print("3*(3+4) =", 3*(3+4))

Как вы могли заметить, математическую операцию (5+2) не нужно брать в кавычки. Так как, всё что в кавычках считается строкой а не операцией и не высчитывается.

Выполним этот код:

$ python3 hello.py 
5 + 2 = 7
7 + 4 = 11
3*(3+4) = 21

Подробнее математические операции рассмотрим в отдельной статье.

Вывод значений переменных

Ну и конечно мы можем выводить значения переменных. Переменную, также как и операцию, не нужно брать в кавычки, вот пример кода:

a=6
b=8
print(a, "*", b, "=", a*b, sep='')

Я изменил разделитель, чтобы убрать пробелы.

Код написанный выше выполняется следующим образом:

$ python3 hello.py 
6*8=48

Итоговый пример

И для закрепления материала давайте напишем и разберём такую программку:

# Для вывода строк используем функцию print()
print("Привет!", "Сейчас посчитаем, сколько будет 6 * 8", sep='\n')

# Устанавливаем переменные
a=6
b=8

# Производим вычисления
print("Производим вычисления", end='... ')
print(a, "*", b, "=", a*b, sep='')

# И сохриним результат в файл
file = open('print.txt','a+')
print(a, "*", b, "=", a*b, sep='', file=file)
file.close()

print("Результат был записан в файл 'print.txt'")
print("Выполните команду 'cat print.txt',", end=' ')
print("чтобы посмотреть содержимое файла.")

Вот результат выполнения этой программы:

$ python3 hello.py 
Привет!
Сейчас посчитаем, сколько будет 6 * 8
Производим вычисления... 6*8=48
Результат был записан в файл 'print.txt'
Выполните команду 'cat print.txt', чтобы посмотреть содержимое файла.

$ cat print.txt
6*8=48

В официальной документации встроенная в Python функция print() описана здесь.

Другие статьи по python доступны здесь.

Сводка

Python 3. Вывод текста на консоль. Функция print()

Имя статьи

Python 3. Вывод текста на консоль. Функция print()

Описание

В статье узнаем как в Python 3, с помощью встроенной функции print(), вывести текст на консоль. А для закрепления напишем небольшую программу

Содержание:развернуть

  • Синтаксис
  • Параметры
  • Пример использования функции print
  • Кодировка
  • Буферизация ввода-вывода
  • Блочная буферизация (block-buffered)

  • Линейная буферизация (line-buffered)

  • Небуферизированный вывод (unbuffered)

  • Стилизированный print
  • pprint

  • reprlib

  • json.dumps

  • Цвет (управляющие коды ANSI)
  • Анимация (прелоадеры)
  • Вращающееся колесо

  • Progress Bar

  • Best practice

Каждый, кто изучает язык программирования Python, начинает с функции print(), выводя с ее помощью на экран первое сообщение — «Привет, мир!». Ее можно использовать для вывода текстовых сообщений, однако ошибочно полагать, что это все, что нужно знать о print() в Python.

Функция print() в языке Питон предназначена для вывода заданных объектов на стандартное устройство вывода — обычно экран, также может отправлять их в файл.

Синтаксис

Рассмотрим синтаксис этой функции. Самый простой пример:

>>> print()

Даже если функция не получает никаких аргументов, все равно необходимо вставлять после названия пустые скобки, что значит для интерпретатора выполнить функцию, а не просто ссылаться на нее.

В результате этого будет выведен неотображаемый символ пустой строки, она появиться на экране, не нужно путать это с пустой строкой, в которой вообще нет никаких символов.

Но чаще всего нужно передать какое-то сообщение пользователю, к примеру:

>>> print('Your message here')

Параметры

Как было сказано, print() можно вызывать без всяких аргументов при необходимости создать пустую строку, или указывать один аргумент для вывода сообщения. Кроме того, функция может принимать любое количество позиционных аргументов, разделяя их запятой, что очень удобно при необходимости объединения нескольких элементов.

Полная версия print выглядит так:

print(object1, object2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

  • *objects — объект/объекты которые необходимо вывести;
  • sep — разделитель между объектами. В качестве своего значения можно передавать строку или None (по умолчанию пробел » «);
  • end — символ в конце строки (по умолчанию перенос строки \n);
  • file — file-like объект [поток] (по умолчанию sys.stdout);
  • flush — принудительный сброс потока [работает с версии Python 3.3] (по умолчанию False).

Пример использования функции print

Самый простой пример:

>>> print('Hello world')

Следующий пример – вывод строкового значения из переменной:

>>> message = 'Hello world'
>>> print(message)

Выведем разные типы:

>>> print('one', 'two', 'three') # str
one two three

>>> print(42) # int
42

>>> print(3.14) # float
3.14

>>> print(True) # bool
True

>>> print([1, 2, 3]) # list
[1, 2, 3]

>>> print({'red', 'green', 'blue'}) # set
{'red', 'green', 'blue'}

>>> print({'name': 'Alice', 'age': 42}) # dict
{'name': 'Alice', 'age': 42}

>>> print((1, 2, 3)) # tuple
(1, 2, 3)

Ниже — пример использования параметра sep:

>>> print('hello', 'world', sep=None)
hello world
>>> print('hello', 'world', sep=' ')
hello world
>>> print('hello', 'world')
hello world

Если функция должна выводить аргументы в виде отдельных строк, можно передать символ экранирования:

>>> print('hello', 'world', sep='\n')
hello
world

Более полезный пример — вывод аргументов в виде пути к файлу:

>>> print('home', 'user', 'documents', sep='/')
home/user/documents

Второй необязательный параметр — end. Он позволяет предотвратить разрыв строки, когда выведенное сообщение не должно заканчиваться символом новой строки. Для этого передается пустая строка:

print('Checking file integrity...', end='')
print('ok')
Checking file integrity...ok

Как и в случае с sep, end можно использовать для объединения отдельных фрагментов в один большой. При этом вместо объединения аргументов текст из каждого вызова функции будет располагаться в одной строке:

>>> print('The first sentence', end='. ')
>>> print('The second sentence', end='. ')
>>> print('The last sentence.')
The first sentence. The second sentence. The last sentence.

При необходимости можно указывать одновременно два ключевых аргумента:

print('Mercury', 'Venus', 'Earth', sep=', ', end='!')
Mercury, Venus, Earth!

Еще одни параметры print()file и flush. В примере ниже реализована запись логов в файл порциями. С помощью параметра file данные выводятся не на экран, а в файл. Flush незамедлительно сбрасывает накопленный буфер в файл каждые 10 итераций.

import time

source_file = open('parse.txt', 'w')
for i in range(0, 30):
if i % 10 == 0 and i > 0:
print(f"iteration #{i}", file=source_file, flush=True)
else:
print(f"iteration #{i}", file=source_file)
time.sleep(1)

source_file.close()

Кодировка

Функция print() в Python 3 и выше никак не контролирует кодировку символов — это определяется потоком кода. В большинстве случаев нет необходимости менять кодировку, так как по умолчанию используется UTF-8.

В Python 2 кодировка зависит от того, данные какого типа выводятся на экран. При выводе текста кириллицей рекомендуется указывать способ кодировки:

>>> print u'Привет'
>>> print "Привет".decode('utf-8')

Системную кодировку можно узнать через sys.stdout.encoding:

>>> import sys
>>> sys.stdout.encoding
'utf-8'

Буферизация ввода-вывода

Буферизация (от англ. buffer) — способ организации обмена, который подразумевает использование буфера для временного хранения данных.

Блочная буферизация (block-buffered)

Операции ввода и вывода иногда буферизуются с целью повышения производительности. Рассмотрим пример:

import time

num_seconds = 1
for countdown in reversed(range(num_seconds + 1)):
if countdown > 0:
print(countdown, end="...")
time.sleep(1)
else:
print('Go!')

В качестве конца строки мы используем «…». В такой реализации функция print() будет накапливать строки в буфер, и выведет сразу весь результат после вызова print('Go!')

3...2...1...Go!

Линейная буферизация (line-buffered)

Линейная буферизация потока, перед началом ввода/вывода, ожидает момента, пока в буфере не появится разрыв строки. Изменив print() в примере выше на следующий:

print(countdown, end="\n")

мы увидим последовательную печать на экран:

3
2
1
Go!

Небуферизированный вывод (unbuffered)

Unbuffered поток соответствует своему названию — никакой буферизации не происходит, операция ввода/вывода выполняются без промедления. Для этого достаточно переписать print() из примера выше следующим образом:

print(countdown, end='...', flush=True)

Тем самым функция print() принудительно очищает поток, не ожидая символа новой строки в буфере.

Стилизированный print

pprint

С помощью модуля pprint, который входит в стандартную библиотеку Python, можно более наглядно отображать некоторые объекты, при этом структура их сохраняется.

Один из примеров использования модуля — словарь со вложенными словарями:

from pprint import pprint

ifaces = [{
"name": "eth0",
"ip": "192.10.120.100",
"speed": 10000,
"options": {
"test1": {
"var1": True,
"var2": False,
},
"test2": True,
}
}]

pprint(ifaces)

вместо длинной строки будет отображен так:

[{'ip': '192.10.120.100',
'name': 'eth0',
'options': {'test1': {'var1': True, 'var2': False}, 'test2': True},
'speed': 10000}]

Есть необязательный параметр depth и indent. Depth указывает — ключи какого уровня вложенности отображать, скрытые уровни будут заменены на троеточие. Indent устанавливает размер отступов:

pprint(ifaces, depth=2, indent=2)[ { 'ip': '192.10.120.100',
'name': 'eth0',
'options': {'test1': {...}, 'test2': True},
'speed': 10000}]

reprlib

Модуль reprlib позволяет использовать функцию repr(), благодаря которой сокращается отображение глубоко вложенных или больших контейнеров, а также множества рекурсивных вызовов:

>>> import reprlib
>>> reprlib.repr([x**10 for x in range(5)])
'[0, 1, 1024, 59049, 1048576]'

json.dumps

Словари часто представляют собой данные JSON, широко используемые во всемирной сети. Для правильной стилизации словаря в строку JSON можно воспользоваться одноименным модулем, который имеет хорошие возможности печати:

import json

users = [{
"name": "Alex",
"age": "30",
"login": "alex89",
}, {
"name": "Petr",
"age": "25",
"login": "one_user1",
}]

print(json.dumps(users, indent=4, sort_keys=True))

результат:

[
{
"age": "30",
"login": "alex89",
"name": "Alex"
},
{
"age": "25",
"login": "one_user1",
"name": "Petr"
}
]

Цвет (управляющие коды ANSI)

Для выделения важной информации при выводе текста можно воспользоваться возможностью форматировать текст с помощью ANSI кодов. Это может выглядеть как «\033[31m«, где \033 — указание на то, что дальше описывается управляющий код, [31m – задание красного цвета текста.

Пример:

def out_red(text):
print("\033[31m {}".format(text))

def out_yellow(text):
print("\033[33m {}".format(text))

def out_blue(text):
print("\033[34m {}".format(text))

out_red("Вывод красным цветом")
out_yellow("Текст жёлтого цвета")
out_blue("Синий текст")

Чтобы такой вариант работал не только на Linux, но и на Windows, необходимо активировать поддержку ANSI для stdout в запущенной консоли, делается это так:

import ctypes

kernel32 = ctypes.windll.kernel32
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)

Анимация (прелоадеры)

Чтобы сделать интерфейс программы более привлекательным, можно анимировать его. Например, используя preloader, пользователь будет знать, что программа все еще работает.

Пример прелоадеров на Python

Вращающееся колесо

Одним из примеров прелоадера является вращающее колесо, что указывает на незавершенную работу, когда точно не известно, сколько времени осталось до завершения запущенной операции. Часто такой прием используется во время загрузки данных с сети, устанавливая простую анимацию движения из последовательности нескольких символов, циклически повторяющихся:

from itertools import cycle
from time import sleep

for frame in cycle(r'-\|/-\|/'):
print('\r', frame, sep='', end='', flush=True)
sleep(0.2)

Progress Bar

Если же время до завершения операции известно или же есть возможность определить процент выполнения задачи, можно установить анимированный прелоадер. В таком случае необходимо определить, сколько знаков «#» нужно отобразить и сколько пробелов вставить. После этого текст удаляется и строится сначала:

from time import sleep

def progress(percent=0, width=30):
left = width * percent // 100
right = width - left
print('\r[', '#' * left, ' ' * right, ']',
f' {percent:.0f}%',
sep='', end='', flush=True)

for i in range(101):
progress(i)
sleep(0.1)

Best practice

Как убрать пробелы в print()
Многие начинающие Python разработчики забывают о том, что разделителем у функции print() по умолчанию является пробел (» «)

name = input()
print("Hello,", name, '!') # Hello, Alex !

Для удаления пробела, используйте параметр sep:

print("Hello, ", name, '!', sep='') # Hello, Alex!

Python print to file (печать в файл)
При необходимости записать какой-то объект в файл можно воспользоваться стандартными возможностями функции print():

1 открыть нужный файл для записи, вовсе не обязательно создавать его вручную, следующий код сделает это автоматически:

sample = open('samplefile.txt', 'w')

2 записать нужное значение в открытый файл:

print("I'm starting to learn the language Python", file = sample)

3 закрыть файл после окончания операции:

sample.close()

В результате этого будет создан обычный текстовый файл с записанным значением, работать с которым можно будет точно так же, как и с созданным самостоятельно.


Таким образом, несмотря на свою кажущуюся простоту, стандартная функция для вывода print() имеет немало скрытых возможностей, некоторые из которых были рассмотрены.

На примерах узнайте, какие возможности предлагает функция print в Python.

Многие из вас при чтении этого руководства наверняка подумают, что в этой простой функции нет ничего нераскрытого, потому что именно с print многие начинают свое знакомство с Python, выводя на экран заветную фразу Hello, World!. Это естественно не только для Python, но и для любого языка, что функция print является базовой и одним из первых шагов при изучении как программирования в целом, так и конкретного синтаксиса. Однако со временем многие переходят к более продвинутым темам, забывая о возможностях простых на первый взгляд функций.

Это руководство целиком посвящено функции print в Python — из него вы узнаете о том, насколько она недооценена.

Начнем с вывода фразы Hello, World!.

print("Hello, World!")
Hello, World!

Если в Python 2 скобки можно не использовать, то в Python3 они обязательны. Если их не указать, то будет вызвана синтаксическая ошибка.

print("Hello, World!")
  File "<ipython-input-6-a1fcabcd869c>", line 1
    print "Hello, World!"
                        ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello, World!")?

Из текста выше можно сделать вывод, что в Python 3 print() — это не инструкция, а функция.

Чтобы убедиться, проверим type/class функции print().

type(print)

builtin_function_or_method

Возвращается builtin_function_or_method. Это значит, что это ранее определенная или встроенная функция Python.

Предположим, что нужно добавить перенос строки или вертикальный отступ между двумя выводами. Для этого достаточно вызвать print(), не передавая аргументов.

print("Hello, World!");print("Hello, World!")
Hello, World!
Hello, World!
print("Hello, World!")
print()
print("Hello, World!")
Hello, World!

Hello, World!

Рассмотрим синтаксис функции print().

print(value, ..., sep='', end='\n', file=sys.stdout, flush=False)

Как вы знаете, функция print выводит значения в поток данных или в sys.stdout по умолчанию. sys.stdout или стандартный вывод системы означают, что функция print выведет значение на экран. Его можно поменять на stdin или stderr.

Необязательные аргументы:

  • sep — это может быть строка, которую необходимо вставлять между значениями, по умолчанию — пробел.

    Вставим список слов в print и разделим их с помощью символа новой строки. Еще раз: по умолчанию разделитель добавляет пробел между каждым словом.

    print('туториал', 'по', 'функции', 'print()')
    
    туториал по функции print()
    
    # \n перенесет каждое слово на новую строку
    print('туториал', 'по', 'функции', 'print()', sep='\n')  
    
    туториал 
    по 
    функции 
    print()
    

    Также можно разделить слова запятыми или добавить два символа новой строки (\n), что приведет к появлению пустой строки между каждой строкой с текстом или, например, знак плюс (+).

    print('туториал', 'по', 'функции', 'print()', sep=',')
    
    туториал,по,функции,print()
    
    print('туториал', 'по', 'функции', 'print()', sep='\n\n')
    
    туториал 
    
    по 
    
    функции 
    
    print()
    
    print('туториал', 'по', 'функции', 'print()', sep=',+')
    
    туториал,+по,+функции,+print()
    

    Прежде чем переходить к следующему аргументу, end, стоит напомнить, что в функцию можно передать и переменную. Например, определим список целых чисел и вставим его в функцию pass. Это список и будет выведен.

    int_list = [1,2,3,4,5,6]
    print(int_list)
    
    [1, 2, 3, 4, 5, 6]
    
  • end — это строка, которая добавляется после последнего значения. По умолчанию — это перенос на новую строку (\n). С помощью аргумента end программист может самостоятельно определить окончание выражения print.

    Предположим, есть две строки, а задача состоит в том, чтобы объединить их, оставив пробел. Для этого нужно в первой функции print указать первую строку, str1 и аргумент end с кавычками. В таком случае на экран выведутся две строки с пробелом между ними.

    str1 = 'туториал по'
    str2 = 'функции print()'
    
    print(str1)
    print(str2)
    
    туториал по
    функции print()
    
    print(str1, end=' ')
    print(str2)
    
    туториал по функции print()
    

    Возьмем другой пример, где есть функция, которая должна выводить значения списка на одной строке. Этого можно добиться с помощью такого значения аргумента end:

    def value(items):
        for item in items:
            print(item, end=' ')
    
    
    value([1,2,3,4])
    
    1 2 3 4
    
  • file — файлоподобный объект (поток). По умолчанию — это sys.stdout. Здесь можно указать файл, в который нужно записать или добавить данные из функции print.

    Таким образом вывод функции можно сохранять в файлы форматов .csv или .txt. Рассмотрим это на примере с перебором всех элементов списка. Он сохраняется в текстовом файле. В первую очередь файл нужно открыть в режиме append. Далее определяется функция, чей вывод будет добавляться внутрь текстового файла.

    file = open('print.txt','a+')
    
    
    def value(items):
        for item in items:
            print(item, file=file)
        file.close()  # закройте файл после работы с ним.
    
    value([1,2,3,4,5,6,7,8,9,10])
    

    Когда исполнение будет завершено, появится файл print.txt в текущей папке.

    Теперь очевидно, что вывод можно сохранять в файлы, а не только выводить на экран.

  • flush — определяет, нужно ли принудительно очищать поток. По умолчанию значение равно False.

    Как правило, вывод в файл или консоль буферизируется как минимум до тех пор, пока не будет напечатан символ новой строки. Буфер значит, что вывод хранится в определенном регистре до тех пор, пока файл не будет готов к сохранению значения или не окажется закрыт. Задача flush — убедиться в том что, буферизированный вывод благополучно добрался до точки назначения.

    import time
    
    print('Пожалуйста, введите ваш электронный адрес : ', end=' ')
    # print('Пожалуйста, введите ваш электронный адрес : ', end=' ', flush=True)  
    # запустите код выше, чтобы увидеть разницу.
    time.sleep(5)
    
    Пожалуйста, введите ваш электронный адрес :  
    

    Если запустить написанный выше код, вы заметите, что строка с запросом на ввод не появится до тех пор, пока таймер не закончится, а программа не закроется. Но если добавить аргумент flush=True, то строка отобразится сразу, но нужно будет подождать 5 секунд, чтобы программа закрылась.

    Каким-то образом Jupyter Notebook или Jupyter Lab иначе разбираются с этой особенностью и все равно показывают текст перед 5-секундным таймером, поэтому если хочется проверить эту особенность print, то функцию необходимо запускать в командной строке, а не в Jupyter.

А теперь посмотрим, как можно использовать функцию print для получения ввода от пользователя в Jupyter Notebook. Для этого используется встроенная функция input().

tutorial_topic = input()
print("Тема сегодняшнего урока: ", end='')
print(tutorial_topic)
функция print()


Тема сегодняшнего урока: функция print()

Здесь указан опциональный аргумент end, который объединяет статическую инструкцию в print и ввод пользователя.

Рассмотрим другие интересные способы вывода значений переменных в функции print.

  • Для отображения значения переменной вместе с определенной строкой, нужно лишь добавить запятые между ними. В этом случае положение строки и переменной не имеет значения.
    a = 2
    b = "PythonRU"
    print(a,"— целое число, а",b,"— строка.")
    
    2 — целое число, а PythonRU — строка.
    
  • Можно использовать метод format, передавая ему любые значения переменных для вывода. При их передаче нужно указывать номера индексов (в том порядке, в котором они размещаются в аргументе) в строке. В таком случае функция print будет выступать шаблоном.

    Также важно запомнить, что номера индексов указываются в фигурных скобках {}, которые выступают заполнителями.

    Разберем это на примере:

    a = 2
    b = "PythonRU"
    print("{0} — целое число, а {1} — строка.".format(a,b))
    
    2 — целое число, а PythonRU — строка.
    

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

    a = 2
    b = "PythonRU"
    print("{1} — целое число, а {1} — строка.".format(a,b))
    
    PythonRU — целое число, а PythonRU — строка.
    
  • Вместо аргумента format можно использовать знак процента (%) для вывода значений переменных.

    Этот способ тоже работает по принципу заполнителей. Но здесь не нужно указывать номера индексов, а только обозначить тип данных, которые получит функция.

    • %d — это заполнитель для числовых или десятичных значений.
    • %s — заполнитель для строк.
    a = 2
    b = "PythonRU"
    print("%d — целое число, а %s — строка."%(a,b))
    
    2 — целое число, а PythonRU — строка.
    

    Посмотрим, что произойдет, если указать %s для переменной a, которая является целым числом.

    print("%s — целое число, а %s — строка."%(a,b))
    
    2 — целое число, а PythonRU — строка.
    

    Как видно, все работает. Причина в том, что функция print неявно выполняет typecasting и конвертирует целое число в строку. Но в обратном порядке это работать не будет. Функция не сможет конвертировать строку в целое число, а вместо этого выведется TypeError.

    print("%d — целое число, а %d — строка."%(a,b))
    
    
    ---------------------------------------------------------------------------
    
    TypeError                                 Traceback (most recent call last)
    
    <ipython-input-121-68c55041ecfe> in <module>
    ----> 1 print("%d — целое число, а %d — строка."%(a,b))
    
    
    TypeError: %d format: a number is required, not str
    
    

Вывод

Это руководство — отличная отправная точка для новичков, желающих добиться высокого уровня мастерства в Python. Поиграйте с функций print еще и разберитесь с другими возможностями, которые не были рассмотрены здесь.

Ввод и вывод данных

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

Ввод данных в программу и их вывод важны в программировании. Без ввода программы делали бы одно и то же, исключая случаи, когда в них самих генерируются случайные значения. Вывод позволяет увидеть, использовать, передать дальше результат работы программы.

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

Можно сказать, что программа – это открытая система, которая обменивается чем-либо с внешней для нее средой. Если живой организм в основном обменивается веществом и энергией, то программа – данными, информацией.

Вывод данных. Функция print()

Что такое функция в программировании, узнаем позже. Пока будем считать, что print() – это такая команда языка Python, которая выводит то, что в ее скобках на экран.

>>> print(1032)
1032
>>> print(2.34)
2.34
>>> print("Hello")
Hello

В скобках могут быть любые типы данных. Кроме того, количество данных может быть различным:

>>> print("a:", 1)
a: 1
>>> one = 1
>>> two = 2
>>> three = 3
>>> print(one, two, three)
1 2 3

Можно передавать в функцию print() как непосредственно литералы (в данном случае «a:» и 1), так и переменные, вместо которых будут выведены их значения. Аргументы функции (то, что в скобках), разделяются между собой запятыми. В выводе вместо запятых значения разделены пробелом.

Если в скобках стоит выражение, то сначала оно выполняется, после чего print() уже выводит результат данного выражения:

>>> print("hello" + " " + "world")
hello world
>>> print(10 - 2.5/2)
8.75

В print() предусмотрены дополнительные параметры. Например, через параметр sep можно указать отличный от пробела разделитель строк:

>>> print("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", sep="-")
Mon-Tue-Wed-Thu-Fri-Sat-Sun
>>> print(1, 2, 3, sep="//")
1//2//3

Параметр end позволяет указывать, что делать, после вывода строки. По-умолчанию происходит переход на новую строку. Однако это действие можно отменить, указав любой другой символ или строку:

>>> print(10, end="")
10>>>

Обычно end используется не в интерактивном режиме, а в скриптах, когда несколько выводов подряд надо разделить не переходом на новую строку, а, скажем, запятыми. Сам переход на новую строку обозначается символом ‘\n’. Если присвоить это значение параметру end, то никаких изменений в работе функции print вы не увидите, так как это значение и так присвоено по-умолчанию:

>>> print(10, end='\n')
10
>>>

Однако, если надо отступить на одну дополнительную строку после вывода, то можно сделать так:

>>> print(10, end='\n\n')
10

>>>

В функцию print нередко передаются так называемые форматированные строки, хотя по смыслу их правильнее называть строки-шаблоны. Никакого отношения к самому print они не имеют. Когда такая строка находится в скобках print(), интерпретатор сначала согласно заданному в ней формату преобразует ее к обычной строке, после чего передает результат в print().

Форматирование может выполняться в так называемом старом стиле или с помощью строкового метода format. Старый стиль также называют Си-стилем, так как он схож с тем, как происходит вывод на экран в языке C. Рассмотрим пример:

>>> pupil = "Ben"
>>> old = 16
>>> grade = 9.2
>>> print("It's %s, %d. Level: %f" % (pupil, old, grade))
It's Ben, 16. Level: 9.200000

Здесь вместо трех комбинаций символов %s, %d, %f подставляются значения переменных pupil, old, grade. Буквы s, d, f обозначают типы данных – строку, целое число, вещественное число. Если бы требовалось подставить три строки, то во всех случаях использовалось бы сочетание %s.

Хотя в качестве значения переменной grade было указано число 9.2, на экран оно вывелось с дополнительными нулями. Чтобы указать, сколько требуется знаков после запятой, надо перед f поставить точку, после нее указать желаемое количество знаков в дробной части:

>>> print("It's %s, %d. Level: %.1f" % (pupil, old, grade))
It's Ben, 16. Level: 9.2

Теперь посмотрим на метод format():

>>> print("This is a {0}. It's {1}.".format("ball", "red"))
This is a ball. It's red.
>>>
>>> print("This is a {1}. It's {0}.".format("white", "cat"))
This is a cat. It's white.
>>>
>>> print("This is a {2}. It's {0} {1}.".format("a", "number", 1))
This is a 1. It's a number.

В строке в фигурных скобках указаны номера данных, которые будут сюда подставлены. Далее к строке применяется метод format(). В его скобках указываются сами данные (можно использовать переменные). На нулевое место подставится первый аргумент метода format(), на место с номером 1 – второй и т. д.

На самом деле возможности метода format существенно шире, и для их изучения понадобился бы отдельный урок. Нам пока будет достаточно этого.

В новых релизах Питона появился третий способ создания форматированных строк – f-строки. Перед их открывающей кавычкой прописывается буква f. В самой строке внутри фигурных скобок записываются выражения на Python, которые исполняются, когда интерпретатор преобразует строку-шаблон в обычную.

>>> a = 10
>>> b = 1.33
>>> c = 'Box'
>>> print(f'qty - {a:5}, goods - {c}')
qty -    10, goods - Box
>>> print(f'price - {b + 0.2:.1f}')
price - 1.5

В примере число 5 после переменной a обозначает количество знакомест, отводимых под вывод значения переменной. В выражении b + 0.2:.1f сначала выполняется сложение, после этого значение округляется до одного знака после запятой.

Ввод данных. Функция input()

За ввод в программу данных с клавиатуры в Python отвечает функция input. Когда вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После этого, когда он нажмет Enter, функция input() заберет введенный текст и передаст его программе, которая уже будет обрабатывать его согласно своим алгоритмам.

Если в интерактивном режиме ввести команду input(), то ничего интересного вы не увидите. Компьютер будет ждать, когда вы что-нибудь введете и нажмете Enter или просто нажмете Enter. Если вы что-то ввели, это сразу же отобразиться на экране:

Функция input() передает введенные данные в программу. Их можно присвоить переменной. В этом случае интерпретатор не выводит строку сразу же:

>>> answer = input()
No, it is not.

В данном случае строка сохраняется в переменной answer, и при желании мы можем вывести ее значение на экран:

>>> answer
'No, it is not.'

При использовании функции print() кавычки в выводе опускаются:

>>> print(answer)
No, it is not.

Куда интересней использовать функцию input() в скриптах – файлах с кодом. Рассмотрим такую программу:

name_user = input()
city_user = input()
print(f'Вас зовут {name_user}. Ваш город {city_user}')

При запуске программы, компьютер ждет, когда будет введена сначала одна строка, потом вторая. Они будут присвоены переменным name_user и city_user. После этого значения этих переменных выводятся на экран с помощью форматированного вывода.

Вышеприведенный скрипт далек от совершенства. Откуда пользователю знать, что хочет от него программа? Чтобы не вводить человека в замешательство, для функции input предусмотрен специальный параметр-приглашение. Это приглашение выводится на экран при вызове input(). Усовершенствованная программа может выглядеть так:

name_user = input('Ваше имя: ')
city_user = input('Ваш город: ')
print(f'Вас зовут {name_user}. Ваш город {city_user}')

Обратите внимание, что в программу поступает строка. Даже если ввести число, функция input() все равно вернет его строковое представление. Но что делать, если надо получить число? Ответ: использовать функции преобразования типов.

В данном случае с помощью функций int() и float() строковые значения переменных qty и price преобразуются соответственно в целое число и вещественное число. После этого новые численные значения присваиваются тем же переменным.

Программный код можно сократить, если преобразование типов выполнить в тех же строках кода, где вызывается функция input():

qty = int(input("Сколько апельсинов? "))
price = float(input("Цена одного? "))
 
summa = qty * price
 
print("Заплатите", summa, "руб.")

Сначала выполняется функция input(). Она возвращает строку, которую функция int() или float() сразу преобразует в число. Только после этого происходит присваивание переменной, то есть она сразу получает численное значение.

Практическая работа

  1. Напишите программу (файл user.py), которая запрашивала бы у пользователя:
    — его имя (например, «What is your name?»)
    — возраст («How old are you?»)
    — место жительства («Where are you live?»)
    После этого выводила бы три строки:
    «This is имя«
    «It is возраст«
    «(S)he live in место_жительства«
    Вместо имя, возраст, место_жительства должны быть данные, введенные пользователем. Примечание: можно писать фразы на русском языке, но если вы планируете стать профессиональным программистом, привыкайте к английскому.

  2. Напишите программу (файл arithmetic.py), которая предлагала бы пользователю решить пример 4 * 100 — 54. Потом выводила бы на экран правильный ответ и ответ пользователя. Подумайте, нужно ли здесь преобразовывать строку в число.

  3. Запросите у пользователя четыре числа. Отдельно сложите первые два и отдельно вторые два. Разделите первую сумму на вторую. Выведите результат на экран так, чтобы ответ содержал две цифры после запятой.

Примеры решения и дополнительные уроки в pdf-версии

курса

Разберем, как работают функции ввода и вывода данных — input() и print() в Python. Начнем с функции print().

Функция вывода print()

Функция print() выводит на экран или в файл все переданные в нее аргументы.

Синтаксис функции print()

print()

Полный синтаксис выглядит так:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

Аргументы функции:

objects – объект, который нужно вывести, знак * означает, что объектов для вывода может быть несколько.
sep – разделяет объекты при выводе. По умолчанию: sep=' '.
end – это что выводится после вывода всех объектов, по умолчанию это перенос строки;
file – служит для вывода в файл, ожидается объект с методом write (string). Если значение не задано, происходит вывод на экран;
flush – если задано значение True, поток принудительно сбрасывается. Значение по умолчанию: False.

Примеры работы функции print()

Эта функция выводит все, что у нее в скобках:

print(1)
print(1, 2, 3)
print('текст')
#1
#1 2 3
#текст

А также любые типы данных:

my_list = ['один', 'два', 'три']
my_bool = True
a = 1234
print(my_list)
print(my_bool)
print(a)
#['один', 'два', 'три']
#True
#1234

И выражения:

a = 5
b = 5
print(1 + 2)
print(a / b)
print('hello' + ' ' + 'world')
#3
#1.0
#hello world

Применение параметра sep в функции print()

Sep — сокращенно separator — разделитель (по умолчанию это пробел), с его помощью разделяем объекты вывода любыми символами и строками.

print(1, 2, 3, 4, sep=' | ')
#1 | 2 | 3 | 4
print('https:/', 'fullstacker.ru', 'contacts', sep='/')
#https://fullstacker.ru/contacts
print(1, 2, 3, 4, sep='\n')
#1
#2
#3
#4

Применение параметра end в функции print()

С его помощью можно предотвратить перенос строки в конце вывода, по умолчанию, как раз и стоит перенос строки, т.е. end='\n'. Или же просто добавлять что-то к выводимому объекту в конце.

print('сделаем вывод')
print('в одну')
print('строку')
#сделаем вывод
#в одну
#строку
print('сделаем вывод', end=' ')
print('в одну', end=' ')
print('строку')
#сделаем вывод в одну строку

Эти параметры можно совмещать:

a = 'На старт'
b = 'внимание'
c = 'марш'
print(a, b, c, sep=', ', end='!')
#На старт, внимание, марш!

Применение параметра file в функции print()

С помощью этого параметра мы можем вывести информацию не на экран, а в файл:

my_file = open('test.txt', 'w')
print('Запишем строку в файл!', file = my_file)
my_file.close()

В результате в файл test.txt будет записана строка Запишем строку в файл!. Если файла test.txt не было, то он будет создан.

Вывод с помощью f-строк

Допустим нам нужно вывести что-то, что содержит в себе много переменных, стандартным способом это будет выглядеть так:

name = 'Роман'
age = '7'
level = '1'
school = '6'
print('Имя: ', name, '. ', 'Возраст: ', age, ' лет. Ученик ', level, ' класса. СОШ №', school, '.', sep='')
#Имя: Роман. Возраст: 7 лет. Ученик 1 класса. СОШ №6.

Не очень удобно и код читается так себе.

В этом случае нам помогут f-строки. Перед объектом вывода ставим букву f и далее в фигурных скобках указываем переменные, которые нужно вывести:

name = 'Роман'
age = '7'
level = '1'
school = '6'
print(f'Имя: {name}. Возраст: {age} лет. Ученик {level} класса. СОШ №{school}.')
#Имя: Роман. Возраст: 7 лет. Ученик 1 класса. СОШ №6.

Так гораздо удобнее.

Функция ввода input()

За ввод пользовательских данных с клавиатуры в Python отвечает функция input().

Синтаксис

input([prompt])

Когда интерпретатор доходит до функции input(), выполнение программы останавливается и ожидается ввод данных от пользователя.
Пользователь вводит данные, нажимает Enter, программа продолжает по алгоритму.

Пример работы функции input()

name = input()
print(f'Привет, {name}!')
#Саша
#Привет, Саша!

С клавиатуры мы вводим Саша, эта информация присваивается переменной name и далее Python функцией print() выводит приветствие, используя переменную с веденными ранее данными.

У функции input() есть необязательный параметр prompt — он служит подсказкой и отображается перед вводом данных:

name = input('Введите свое имя: ')
print(f'Привет, {name}!')
#Введите свое имя: Александр
#Привет, Александр!

Теперь при вводе данных будет написано Введите свое имя: и далее переложение ввести имя.

Преобразование вводимых данных input()

Я уже писал подробно о типах данных в Python, здесь разберем только преобразования в input().

По умолчанию, все данные, которые вводятся через функцию print() — строки:

a = input()
print(type(a))
#10
#<class 'str'>

Даже если мы введем числа, то это будут строки, и работать с ними как с числами мы не сможем:

a = input()
b = input()
print(a + b)
#1
#2
#12

Мы ввели числа 1 и 2, далее функцией print() хотели вывести сумму чисел, но получили 12. Все потому, что это строки и происходит конкатенацией или объединением, вместо числового сложения.

Для преобразования строк в числа нужно пользоваться функциями.

Input() → int преобразование в целое число

Для того, чтобы получить целое число, введенное в функцию ввода данных, нужно пользоваться функцией int():

a = int(input())
b = int(input())
print(a + b)
#1
#2
#3

Мы ввели числа, 1 и 2, как и в предыдущем примере, но с помощью функции int() мы преобразовали их в числа и в итоге получили сумму этих чисел.

Input() → float преобразование в дробные числа (вещественные)

Для этого используем функцию float(), также, как и в предыдущем примере:

a = float(input())
b = float(input())
print(a + b)
#1.5
#2.5
#4.0

Задачки на использование input() и print()

Рассмотрим практическое применение этих функций на простых задачах.

Рассчитаем периметр прямоугольника

Пользователю необходимо ввести длину и ширину прямоугольника (целые числа), на выходе рассчитать периметр прямоугольника:

width = int(input('Введите длину прямоугольника: '))
height = int(input('Введите ширину прямоугольника: '))
p = (width + height) * 2
print(f'Периметр прямоугольника: {p}')
#Введите длину прямоугольника: 10
#Введите ширину прямоугольника: 20
#Периметр прямоугольника: 60

С помощью функции input() получаем данные от пользователя, преобразуем их функцией int() в целые числа и присваиваем переменным width и height.
По формуле периметра прямоугольника P=(a+b)*2, вычисляем периметр и присваиваем это значение в переменную p.
Выводим результат с помощью функции print().

Предложить пользователю решить пример

Есть пример 4 * 100 — 100, получить ответ от пользователя и сравнить с правильным.

print('Решите пример 4 * 100 - 100')
a = int(input('Ваш ответ: '))
if a == 300:
print('Ответ правильный, 4 * 100 - 100 = 300')
else:
print(f'Ответ {a} неверный. Правильный ответ: 4 * 100 - 100 = 300')
#Решите пример 4 * 100 - 100
#Ваш ответ: 300
#Ответ правильный, 4 * 100 - 100 = 300

Первой функцией print() выведем пример и предложим его решить. Далее запрашиваем ответ с помощью функции input(), приводим его к целому числу и присваиваем переменной a.
Создаем условие, если ответ пользователя правильный — выводим Ответ правильный, 4 * 100 - 100 = 300, если ответ пользователя неправильный, то выводим его ответ и показываем правильный.

Понравилась статья? Поделить с друзьями:

А вот и еще интересные новости по теме:

  • Садовая тачка одноколесная инструкция по сборке
  • Supi saunasuoja инструкция по применению на русском
  • Casio lk 300tv инструкция на русском
  • Токоферола ацетат 200 мг инструкция по применению
  • Инструкция по применению массажных вакуумных банок с насосом

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии