Модуль 1 · Урок 1.4
Ввод, преобразование и вывод
Как программа спрашивает данные, как превратить введённый текст в число и как напечатать результат в нужном виде.
В прошлых уроках цену и количество тетрадей мы записывали прямо в код: 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)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))str нужен, когда число надо склеить с текстом: "Итого: " + 120 остановится с TypeError, а str(120) превращает число в строку «120», и строки склеиваются.
Превратить получится только подходящую запись: int принимает запись целого числа, float — числа с точкой. Из записи с точкой целое не получится:
print(int("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("продолжение")sep="" склеивает значения без пробела. Четвёртая строка программы закончила вывод пробелом вместо перевода строки, поэтому пятая продолжила ту же строку экрана.
sep ставится между значениями, end — после последнего; ↵ — перевод строки. В третьем примере вывод закончен пробелом вместо ↵, поэтому «продолжение» напечаталось на той же строке.f-строки
f-строка собирает текст из готовых кусков и вычисленных значений. Через запятую print сам ставит пробелы и печатает число целиком. Когда нужен точный вид — свой текст между значениями, две цифры после точки, — удобнее f-строка:
quantity = 3price = 42.5print(f"Тетрадей: {quantity}, стоимость: {quantity * price:.2f}")Буква f перед кавычками включает подстановку: выражение в фигурных скобках вычисляется, и его значение встаёт в текст. Часть :.2f после выражения — формат: две цифры после точки. Округляется только напечатанное, само число не меняется.
Стоимость покупки
Соберём всё вместе: программа спрашивает цену тетради и количество и печатает стоимость. Цена и количество вводятся на двух отдельных строках, поэтому нужны два вызова input. Количество всегда целое, а цена может быть дробной, например 42.5:
price = float(input())quantity = int(input())cost = price * quantityprint(f"Стоимость: {cost:.2f}")Цену читаем через 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в решениях не пишут.
Проверьте себя
Ответь сначала сам, потом открой ответ.
Программа из двух строк x = input() и print(x + x). Что она напечатает, если ввести 5? Как получить 10?
ОтветСкрыть ответ
55: input вернул строку "5", и + склеил две строки. Чтобы получить 10, нужно x = int(input()).
Что получится при int("3.5")? А при int(3.5)?
ОтветСкрыть ответ
ValueError: строка с точкой — не запись целого числа. int(3.5) даёт 3: в скобках уже число, и дробная часть отбрасывается.
Что напечатают print(1, 2, 3, sep="") и print(1, 2, 3, sep=", ")?
ОтветСкрыть ответ
123 и «1, 2, 3»: sep ставится только между значениями.
Что напечатает программа из двух строк print("Итого:", end=" ") и print(120)?
ОтветСкрыть ответ
Одну строку «Итого: 120»: первый print закончил вывод пробелом, а не переводом строки.
Что напечатает print(f"{10 / 4:.2f}")?
ОтветСкрыть ответ
2.50: 10 / 4 — это 2.5, а :.2f печатает две цифры после точки.
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Напиши программу: площадь и периметр прямоугольника по вводу
Напиши программу: длина и ширина прямоугольника вводятся на двух отдельных строках, целыми числами. Программа печатает площадь и периметр одним print через запятую. Запусти её, введи 7 и 2 и запиши, что она напечатала.
Запишите напечатанную строку: два числа через пробел — площадь, затем периметр.
Подсказка
Читай числа через int(input()). Площадь — длина на ширину, периметр — удвоенная сумма длины и ширины.
Разбор
Например:
length = int(input())width = int(input())print(length * width, 2 * (length + width))При вводе 7 и 2: площадь 7 · 2 = 14, периметр 2 · (7 + 2) = 18.
Ответ: 14 18
Что напечатает программа, если оба раза ввести 2?
print("1" + input())print(1 + int(input()))Запишите напечатанные строки через пробел в порядке вывода.
Подсказка
Первый input даёт строку, и + её склеивает со строкой "1". Во второй строке int превращает ввод в число.
Разбор
В первой строке склеиваются строки "1" и "2" — печатается 12. Во второй int("2") — число 2, и 1 + 2 = 3.
Ответ: 12 3
Что напечатает программа?
print(int("007"))print(int(-3.9))Запишите напечатанные строки через пробел в порядке вывода.
Подсказка
Из строки с ведущими нулями int получает число без них. У дробного числа int отбрасывает дробную часть — к нулю.
Разбор
int("007") — число 7: ведущие нули у числа не хранятся. int(-3.9) отбрасывает дробную часть: −3.
Ответ: 7 -3
Что напечатает программа?
print(1, 2, 3, sep="-")print("a", end="")print("b")Запишите напечатанные строки через пробел в порядке вывода.
Подсказка
sep ставится между значениями. end="" убирает перевод строки, и следующий print продолжает ту же строку.
Разбор
Первая строка программы печатает 1-2-3. Вторая печатает a без перевода строки, поэтому b встаёт рядом: ab.
Ответ: 1-2-3 ab
Что напечатает программа?
print(f"{7 / 3:.2f}")Введите напечатанное число.
Подсказка
7 / 3 = 2.333…; :.2f оставляет при печати две цифры после точки.
Разбор
7 / 3 — 2.3333…, а формат :.2f печатает две цифры после точки.
Ответ: 2.33
Напиши программу: стоимость тетрадей по вводу
Напиши программу: на первой строке вводится цена тетради, на второй — количество, оба целые. Программа печатает стоимость. Запусти её, введи 40 и 3 и запиши, что она напечатала.
Введите число.
Подсказка
Два int(input()) — цена и количество; стоимость — их произведение.
Разбор
Например:
price = int(input())quantity = int(input())print(price * quantity)При вводе 40 и 3 программа печатает 120.
Ответ: 120
Напиши программу: секунды в часы, минуты и секунды
Напиши программу: вводится число секунд, программа печатает строку вида 1 ч 1 мин 11 с (так выглядит вывод для 3671 секунды). Запусти её, введи 7322 и запиши, что она напечатала.
Запишите напечатанную строку целиком, как на экране.
Подсказка
Часы, минуты и секунды — как в уроке о числах: // 3600, % 3600 // 60, % 60. Строку собери f-строкой, между числом и буквами — пробел.
Разбор
Например:
seconds = int(input())hours = seconds // 3600minutes = seconds % 3600 // 60rest = seconds % 60print(f"{hours} ч {minutes} мин {rest} с")7322 = 2 · 3600 + 2 · 60 + 2.
Ответ: 2 ч 2 мин 2 с