К содержанию

Модуль 1 · Урок 1.4

Ввод, преобразование и вывод

Как программа спрашивает данные, как превратить введённый текст в число и как напечатать результат в нужном виде.

7 задач

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

Ввод с клавиатуры

input() останавливает программу и ждёт, пока ты наберёшь текст и нажмёшь Enter. Текст в скобках input программа печатает как подсказку перед вводом:

name = input("Как тебя зовут? ")print("Привет,", name)
Как тебя зовут? Анна↵ Привет, Анна

Когда программа дойдёт до input, она остановится. В PyCharm щёлкни в панели «Run» внизу, набери ответ и нажми Enter; при запуске из терминала набирай прямо в нём. В примерах урока набранное показано в рамке, а знак ↵ — это Enter. Сам Enter в строку не попадает: в name лежит только «Анна».

input всегда возвращает строку — даже если набраны одни цифры. Введённое 25 будет строкой "25": Python не знает, возраст это, код товара или часть номера телефона. Поэтому превратить строку в число должен ты:

age_text = input()age = int(age_text)print(age + 1)
25↵ 26

int(...) превращает строку "25" в целое число 25 — подробно о нём в следующем разделе. Запись age = int(input()) делает то же в одну строку: Python сначала выполняет внутренние скобки — ввод, а потом превращает результат в число. Без int выражение age_text + 1 остановилось бы с TypeError: строку нельзя сложить с числом, как 10 + "5" в уроке о типах.

Набранные клавиши input() отдаёт строкой "25", без Enter. Числом 25 её делает только int(...), и тогда + 1 даёт 26. Попытка прибавить 1 к самой строке заканчивается TypeError.

Преобразование

Строку в число превращают int и float, число в строку — str. Это те же имена, что у типов из урока «Значения, типы и переменные»: int(...) даёт целое, float(...) — дробное, str(...) — строку:

print(int("-12"))print(float("2.75"))print("Итого: " + str(120))
-12 2.75 Итого: 120

str нужен, когда число надо склеить с текстом: "Итого: " + 120 остановится с TypeError, а str(120) превращает число в строку «120», и строки склеиваются.

Превратить получится только подходящую запись: int принимает запись целого числа, float — числа с точкой. Из записи с точкой целое не получится:

print(int("2.75"))
ValueError: invalid literal for int() with base 10: '2.75'

ValueError — ошибка значения: в скобках строка, но записано в ней не целое число. Так же не сработает float("2,75"): дробную часть в Python отделяют точкой. А вот int(2.75) работает и даёт 2: в скобках уже число, и int отбрасывает дробную часть, как в уроке о числах.

Тонкости:запятая и пробелы во вводе

int и float пропускают пробелы по краям: int(" 25 ") даёт 25. Если же данные приходят с запятой, например «2,75», её сначала заменяют точкой — это делают строковыми методами из урока о строках.

Преобразование не исправляет смысл само. Код товара "007" после int превратится в 7: если ведущие нули важны, оставь текст.

Разделитель и конец вывода

print ставит между значениями пробел, а в конце — перевод строки. Перевод строки — невидимый символ, после которого вывод продолжается с начала следующей строки; на схемах его рисуют знаком ↵. Обе настройки можно поменять: после значений в скобках print пишут sep= — чем разделять значения — и end= — чем закончить вывод:

print(10, 20, 30)print(10, 20, 30, sep="; ")print(10, 20, 30, sep="")print("Начало", end=" ")print("продолжение")
10 20 30 10; 20; 30 102030 Начало продолжение

sep="" склеивает значения без пробела. Четвёртая строка программы закончила вывод пробелом вместо перевода строки, поэтому пятая продолжила ту же строку экрана.

Невидимые символы вывода показаны рамками: sep ставится между значениями, end — после последнего; ↵ — перевод строки. В третьем примере вывод закончен пробелом вместо ↵, поэтому «продолжение» напечаталось на той же строке.

f-строки

f-строка собирает текст из готовых кусков и вычисленных значений. Через запятую print сам ставит пробелы и печатает число целиком. Когда нужен точный вид — свой текст между значениями, две цифры после точки, — удобнее f-строка:

quantity = 3price = 42.5print(f"Тетрадей: {quantity}, стоимость: {quantity * price:.2f}")
Тетрадей: 3, стоимость: 127.50

Буква f перед кавычками включает подстановку: выражение в фигурных скобках вычисляется, и его значение встаёт в текст. Часть :.2f после выражения — формат: две цифры после точки. Округляется только напечатанное, само число не меняется.

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

Стоимость покупки

Соберём всё вместе: программа спрашивает цену тетради и количество и печатает стоимость. Цена и количество вводятся на двух отдельных строках, поэтому нужны два вызова input. Количество всегда целое, а цена может быть дробной, например 42.5:

price = float(input())quantity = int(input())cost = price * quantityprint(f"Стоимость: {cost:.2f}")
42.5↵ 3↵ Стоимость: 127.50

Цену читаем через float: int("42.5") остановился бы с ValueError. Количество — через int: дробных тетрадей не бывает. Если ввести цену 40, float сделает из неё 40.0, а f-строка напечатает «Стоимость: 120.00».

В задачах курса ты записываешь в поле ответа то, что напечатала программа. Подсказки вроде input("Введите цену: ") удобны, но их текст тоже попадёт на экран, и его придётся отбрасывать. Поэтому в решениях задач подсказки в input обычно не пишут.

Итог

Теперь программа о тетрадях не зависит от чисел в коде: она спрашивает цену и количество и печатает стоимость в нужном виде. Вот что из этого понадобится дальше.

  • input()Останавливает программу и ждёт ввода; возвращает строку без Enter. Текст в скобках — подсказка перед вводом.
  • int(), float(), str()Строка → целое, строка → дробное, число → строка. Неподходящая запись — ValueError.
  • int(input())Сначала ввод, затем преобразование — так читают целое число.
  • sep, endРазделитель между значениями (обычно пробел) и конец вывода (обычно перевод строки).
  • f-строка{…} подставляет значение, :.2f печатает две цифры после точки.
  • Ответ задачиВ поле записывают то, что напечатала программа; подсказки в input в решениях не пишут.

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1

Программа из двух строк x = input() и print(x + x). Что она напечатает, если ввести 5? Как получить 10?

ОтветСкрыть ответ
Ответ

55: input вернул строку "5", и + склеил две строки. Чтобы получить 10, нужно x = int(input()).

Вопрос 2

Что получится при int("3.5")? А при int(3.5)?

ОтветСкрыть ответ
Ответ

ValueError: строка с точкой — не запись целого числа. int(3.5) даёт 3: в скобках уже число, и дробная часть отбрасывается.

Вопрос 3

Что напечатают print(1, 2, 3, sep="") и print(1, 2, 3, sep=", ")?

ОтветСкрыть ответ
Ответ

123 и «1, 2, 3»: sep ставится только между значениями.

Вопрос 4

Что напечатает программа из двух строк print("Итого:", end=" ") и print(120)?

ОтветСкрыть ответ
Ответ

Одну строку «Итого: 120»: первый print закончил вывод пробелом, а не переводом строки.

Вопрос 5

Что напечатает print(f"{10 / 4:.2f}")?

ОтветСкрыть ответ
Ответ

2.50: 10 / 4 — это 2.5, а :.2f печатает две цифры после точки.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Напиши программу: площадь и периметр прямоугольника по вводу

Напиши программу: длина и ширина прямоугольника вводятся на двух отдельных строках, целыми числами. Программа печатает площадь и периметр одним print через запятую. Запусти её, введи 7 и 2 и запиши, что она напечатала.

Запишите напечатанную строку: два числа через пробел — площадь, затем периметр.

Что напечатает программа, если оба раза ввести 2?

print("1" + input())print(1 + int(input()))

Запишите напечатанные строки через пробел в порядке вывода.

Что напечатает программа?

print(int("007"))print(int(-3.9))

Запишите напечатанные строки через пробел в порядке вывода.

Что напечатает программа?

print(1, 2, 3, sep="-")print("a", end="")print("b")

Запишите напечатанные строки через пробел в порядке вывода.

Что напечатает программа?

print(f"{7 / 3:.2f}")

Введите напечатанное число.

Напиши программу: стоимость тетрадей по вводу

Напиши программу: на первой строке вводится цена тетради, на второй — количество, оба целые. Программа печатает стоимость. Запусти её, введи 40 и 3 и запиши, что она напечатала.

Введите число.

Напиши программу: секунды в часы, минуты и секунды

Напиши программу: вводится число секунд, программа печатает строку вида 1 ч 1 мин 11 с (так выглядит вывод для 3671 секунды). Запусти её, введи 7322 и запиши, что она напечатала.

Запишите напечатанную строку целиком, как на экране.