</>
Тема 2 из 18

Ввод данных

selfedu · Видео необязательно — всё нужное есть в тексте ниже.Открыть на YouTube ↗

До сих пор наши программы всегда делали одно и то же: числа были записаны прямо в коде. Настоящая программа получает данные снаружи — от пользователя или из файла — и работает с любыми значениями. В этой теме научимся читать входные данные.

Как задачи проверяются

В задачах этого курса твоя программа получает входные данные и должна напечатать выходные данные. Проверяющая система запускает программу много раз на разных входах и сравнивает её вывод с правильным ответом.

Входные данные Программа Выходные данные
то, что программа читает твой код то, что программа печатает через print

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

input() — прочитать одну строку

Функция input() ждёт, пока во входных данных появится строка, и возвращает её как текст (тип str).

name = input()
print("Привет,", name)

Если во входных данных строка Ада, программа напечатает Привет, Ада.

Каждый вызов input() читает следующую строку. Две строки входа — два вызова:

city = input()
country = input()
print(city, "находится в стране", country)
Вход Вывод
Казань<br>Россия Казань находится в стране Россия

⚠️ Не пиши внутри скобок подсказку вроде input("Введите имя: "). Этот текст напечатается в вывод, и проверяющая система посчитает ответ неправильным.

Строка — это ещё не число

input() всегда возвращает текст, даже если ввели цифры. С текстом арифметика работает не так, как с числами:

x = input()   # ввели 2
y = input()   # ввели 3
print(x + y)  # 23 — строки склеились!

Чтобы получить число, строку превращают в него функцией int() (от integer — «целое»):

x = int(input())   # 2 — уже число
y = int(input())   # 3
print(x + y)       # 5

Запись int(input()) читается изнутри наружу: сначала input() читает строку, потом int() превращает её в целое число.

Для дробных чисел есть float():

price = float(input())   # ввели 99.5
print(price * 2)         # 199.0

Пример: программа читает возраст и печатает, сколько человеку исполнится через 10 лет.

age = int(input())
print(age + 10)

Если забыть int(), получится ошибка: Python не умеет складывать строку с числом и сообщит TypeError: can only concatenate str (not "int") to str. Увидишь такую ошибку — проверь, превратил ли ты строку в число.

Несколько чисел в одной строке

Часто во входных данных несколько чисел записаны в одной строке через пробел, например 4 9. Один int(input()) здесь не сработает: строку "4 9" нельзя превратить в одно число.

Для этого случая запомни готовую конструкцию:

a, b = map(int, input().split())

Как она работает, по шагам:

  1. input() читает строку "4 9";
  2. .split() разрезает её по пробелам на части "4" и "9";
  3. map(int, ...) превращает каждую часть в целое число;
  4. a, b = ... раскладывает результаты по переменным: a = 4, b = 9.

Подробно split и map разберём в теме про списки, а пока используй эту строку как готовый инструмент. Количество переменных слева должно совпадать с количеством чисел в строке:

x, y, z = map(int, input().split())   # строка вида: 10 20 30
print(x - y + z)                       # 20

Если чисел в строке больше или меньше, чем переменных, будет ошибка ValueError.

Разбираем формат входных данных

Перед тем как писать код, внимательно прочитай раздел «Входные данные» в условии и ответь себе на два вопроса:

  • Сколько строк во входных данных? Столько раз и нужно читать.
  • Что в каждой строке? Одно число — int(input()), несколько чисел — map(int, input().split()), текст — просто input().

Например, условие говорит: «В первой строке записано одно число — количество учеников. Во второй строке через пробел — рост самого низкого и самого высокого ученика». Тогда чтение выглядит так:

count = int(input())
low, high = map(int, input().split())

Несколько ответов

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

w, h = map(int, input().split())
print(w + h)          # первая строка вывода
print(w - h)          # вторая строка вывода
print(w, h, w * h)    # третья строка: три числа через пробел

Порядок важен: печатай ответы ровно в том порядке, который указан в разделе «Выходные данные».

Большие числа

В Python целые числа могут быть сколь угодно большими: 10**18 или ещё больше посчитается точно. Поэтому если в ограничениях стоят числа вроде 109, беспокоиться о переполнении не нужно — в отличие от многих других языков.

Итог

  • input() читает одну строку входных данных как текст;
  • int(input()) — прочитать целое число, float(input()) — дробное;
  • a, b = map(int, input().split()) — прочитать несколько чисел из одной строки;
  • сначала разбери формат входа, потом пиши код;
  • печатай только ответ, без лишних слов.