Skip to content

Python. Ввод и вывод ​

Консоль как первый интерфейс ​

Консоль, или же CLI (Command Line Interface), — исторически первый способ взаимодействия человека и персонального компьютера. Позже появился GUI — графический интерфейс с окнами, курсором и иконками.

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

Пример

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

Вывод (функция print()) ​

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

Определение

print(*objects, sep=' ', end='\n') - функция консольного вывода в python. Позволяет выводить как один, так и несколько объектов в консоль.

Обратите внимание на то, что если вы передадите несколько значений в print через запятую, то они выведутся через пробел по умолчанию. Часто это бывает очень удобно.

python
a = "Привет"
b = "Мир"

print(a, b)  # Привет Мир

На то, какой разделитель будет между объектами, которые вы выводите влияет параметр sep. По умолчанию он равен пробелу, но вы можете заменить его на более подходящий вам при выводе.

python
a = "Привет"
b = "Мир"

print(a, b, sep=",")  # Привет,Мир

Помимо параметра sep также есть end, который отвечает за то, чем окончится строка. По умолчанию он равен \n, что у программистов называется "перенос каретки". Мы же для простоты назовем это просто переносом строки (enter).

Вы точно так же можете повлиять и на окончание вывода, например выводя все в одну строку.

python
a = 20
b = 26

print(a, end='')
print(b)  # 2026

В данном случае в первом выводе мы заканчиваем строку не переносом, а ничем. Поэтому следующий print() начинает вывод в той же строке, сразу после 20.

Ввод (функция input()) ​

Пока что наши программы были больше похожи на монологи. Но на самом деле мы можем и спросить нужную нам информацию у пользователя. Для этого нам нужна функция консольного ввода input().

Определение

input(prompt='') - функция консольного ввода в python. Позволяет получить от пользователя информацию.

Давайте рассмотрим простой пример.

python
name = input("Как тебя зовут: ")
print("Привет,", name)

Если вы все сделали правильно, то при запуске программы в консоли должен появиться вопрос. Попробуйте написать ваше имя и нажать enter. Тогда программа поздоровается с вами.

Обратите внимание на то, что в input() мы можем задать вопрос, который будет показан пользователю (параметр prompt). Это необязательно, и по умолчанию он равен пустой строке. Часто бывает так, что вопрос задавать не надо, например в олимпиадных задачах.

python
name = input()  # input без вопроса

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

Особенности input() ​

Давайте попробуем спросить у пользователя 2 числа и вывести их сумму.

python
a = input("Введите первое число: ")
b = input("Введите второе число: ")

print(a + b)

Если вы попробуете запустить данный пример, то должны заметить, что в ответе числа не складываются, а "соединяются". Из предыдущей темы мы знаем, что в программировании такое соединение называется конкатенацией.

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

Важно

input() всегда возвращает строку, независимо от того, что пользователь ввел.

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

Форматирование вывода ​

1. Через print() ​

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

python
age = 35
name = "Мария"
print("Меня зовут", name, "и мне", age, "лет")  # Меня зовут Мария и мне 35 лет

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

2. Конкатенацией ​

python
age = "35" # Делаем строкой, так как нельзя складывать строку и число
name = "Мария"
result = "Меня зовут " + name + " и мне " + age + " лет"
print(result)

В данном примере обратите внимание на две вещи:

  1. Возраст объявлен как строка. В ином случае программа даст ошибку потому что складывать строки и числа нельзя.
  2. Перед выводом мы положили итоговую строку в новую переменную. Таким образом, в print() мы передаём уже одну готовую строку, а не несколько отдельных значений.

3. f-строки ​

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

python
age = 35 # Делаем обратно числом
name = "Мария"
print(f"Меня зовут {name} и мне {age} лет")  # f-строка

Этот синтаксис появился в Python 3.6 и является более современной альтернативой методу .format(), который также полностью поддерживается. Поэтому рассмотрим схожий пример.

python
age = 35
name = "Мария"
print("Меня зовут {} и мне {} лет".format(name, age))

Данная запись чуть более громоздкая, поэтому от неё плавно пришли к f-строкам. Используйте их по возможности, они более читаемые и ничем не уступают .format().

Форматирование при выводе float ​

Когда мы работаем с дробными числами, очень часто получаются огромные дробные части. Например:

python
print(f"1 / 3 = {1 / 3}")  # 1 / 3 = 0.3333333333333333

Часто нам нужно только 2-3 символа после запятой. И мы можем получить их при выводе, никак не меняя и не округляя исходное число.

python
print(f"1 / 3 = {1 / 3:.2f}")  # 1 / 3 = 0.33

В данном случае :.2f означает, что мы хотим округлить число до двух знаков после запятой. Это в f-строки тоже перешло из метода .format().

python
print("1 / 3 = {:.2f}".format(1 / 3))  # 1 / 3 = 0.33

Практика ​

Попробуйте написать функцию greet(name), которая принимает имя и возвращает строку вида "Привет, {имя}!" - как раз то, что мы только что разобрали с f-строками.

Задача: Приветствие

Итоги ​

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

Для закрепления знаний попробуйте пройти тест и далее идем к новой теме - Преобразование базовых типов.

Тест по теме

Ввод и вывод

Что такое CLI?

Какой параметр функции print() отвечает за разделитель между выводимыми значениями?

Что делает параметр end='' в функции print()?

Что всегда возвращает функция input()?

Что произойдет при выполнении кода: print('5' + '3')?

Какой из этих способов форматирования строк является самым современным в Python?

Как вывести число 3.14159 с точностью до двух знаков после запятой с помощью f-строки?

Что выведет код: print('Hello', 'World', sep='-', end='!')?

Зачем нужен параметр prompt в функции input()?