Получение целых чисел с помощью int и input

Раздел: Основы Python -> Файловый ввод-вывод

Основные приёмы работы с int(input())

Базовый способ получения целого числа от пользователя - вызов int(input()). Функция input() считывает строку из стандартного потока ввода (клавиатуры или перенаправленного файла), а int() преобразует её в целое число. Этот способ применяется, когда требуется ввести одно число, и введённые данные гарантированно являются целым числом.

number = int(input("Введите число: "))

ввод программ на python (ввод данных в программе python)

После выполнения переменная number будет содержать целое число, введённое пользователем.

Проблема: что произойдёт, если ввести нечисловое значение?

Если ввести текст (например, "abc"), возникнет исключение ValueError: invalid literal for int() with base 10. Программа завершится с ошибкой. Для предотвращения такого сбоя необходима обработка исключений (см. вариант 3).

Как прочитать несколько целых чисел, разделённых пробелами?

Метод split() разбивает строку на список слов, а map(int, ...) применяет преобразование к каждому элементу. Результат обычно собирается в список.

numbers = list(map(int, input().split()))

Python file io (ввод-вывод файлов в python)

Если ввести, например, "10 20 30", в переменной numbers окажется список [10, 20, 30]. Этот подход удобен для чтения строки чисел, введённой в одной строке.

Ошибки: если один из элементов не является числом, возникнет ValueError. Также следует помнить, что пустая строка (просто нажатие Enter) даст пустой список, что может быть неожиданностью. Для защиты можно обернуть преобразование в try-except или предварительно проверить строку.

Как использовать int(input()) для чтения чисел из файла?

При перенаправлении стандартного ввода (python script.py < data.txt) функция input() читает строки из файла. Для обработки всех строк удобно использовать цикл по sys.stdin.

import sys
for line in sys.stdin:
    line = line.strip()
    if line:
        number = int(line)
        print(number)

Python temp files (временные файлы в python)

Каждая непустая строка файла преобразуется в число. Этот метод подходит для обработки числовых данных, сохранённых в текстовом файле (по одному числу на строку).

Проблемы: пустые строки в файле приведут к ValueError, если их не отфильтровать. Кроме того, если файл заканчивается, input() вызовет EOFError, но при использовании цикла for line in sys.stdin обработка завершается автоматически.

Как избежать ошибки преобразования при нечисловом вводе?

Оборачивание вызова int(input()) в конструкцию try-except позволяет перехватить ValueError и запросить ввод повторно.

while True:
    try:
        num = int(input("Введите целое число: "))
        break
    except ValueError:
        print("Ошибка! Введите целое число.")

Python index files (индексация файлов в python)

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

Ошибки: если пользователь решит прервать ввод (Ctrl+C), возникнет KeyboardInterrupt, которое не обрабатывается данным блоком. Для полной защиты можно добавить обработку KeyboardInterrupt или завершать программу при прерывании.

Как прочитать все целые числа из стандартного ввода, если их количество неизвестно?

Используется цикл по sys.stdin с накоплением значений в список.

import sys
numbers = []
for line in sys.stdin:
    line = line.strip()
    if line:
        numbers.append(int(line))

File python class (класс для работы с файлами в python)

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

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

Как прочитать числа, разделённые запятыми или другим символом?

При использовании метода split() можно указать произвольный разделитель. Например, для ввода "10,20,30":

numbers = list(map(int, input().split(',')))

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

Ошибки: если в строке встречаются пробелы вокруг разделителя (например, "10, 20, 30"), после разбиения элементы будут содержать пробелы, что вызовет ValueError. Рекомендуется предварительно удалять лишние пробелы: split(',') и затем strip() для каждого элемента.

Выбор конкретного варианта зависит от задачи: для одиночного числа достаточно int(input()) с обработкой ошибок; для множественных чисел в одной строке – map(int, input().split()); для потоковой обработки файлов – цикл по sys.stdin или input() в цикле до EOFError. Все перечисленные приёмы являются базовыми в Python и широко применяются при разработке скриптов, работающих с текстовыми данными.

- Python copy file (копирование файла в python)
- Python log file (логирование в файл в python)
- Python file methods (методы работы с файлами в python)

Расширенные сценарии использования int(input())

Пример 1: Чтение матрицы чисел с неизвестной размерностью

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

Пример
n = int(input("Введите количество строк: "))
matrix = []
for _ in range(n):
    row = list(map(int, input().split()))
    matrix.append(row)
print(matrix)

Пример ввода:

3
1 2 3
4 5 6
7 8 9

Результат:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Пример 2: Чтение данных с пропуском комментариев (строки, начинающиеся с решётки)

При загрузке конфигурационных файлов строки комментариев должны игнорироваться.

Пример
import sys
numbers = []
for line in sys.stdin:
    line = line.strip()
    if not line or line.startswith('#'):
        continue
    numbers.append(int(line))
print(numbers)

Пример входного файла:

# Настройки
100
# Порог
200

Результат:

[100, 200]

Пример 3: Обработка ввода с разделителем, отличным от пробела, и очистка пробелов

Если данные приходят в формате "10, 20, 30" (с пробелами после запятой), необходимо удалить пробелы из элементов.

Пример
raw = input("Введите числа через запятую: ")
parts = raw.split(',')
numbers = []
for p in parts:
    p = p.strip()
    if p:
        numbers.append(int(p))
print(numbers)

Ввод: 10, 20, 30

Результат:

[10, 20, 30]

Пример 4: Использование генераторов вместо списков для экономии памяти

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

Пример
total = sum(int(x) for x in input().split())
print(total)

Ввод: 1 2 3 4 5

Результат:

15

Пример 5: Чтение чисел до ввода стоп-слова с накоплением в список

Пример
numbers = []
while True:
    s = input("Введите число (или 'stop'): ")
    if s.lower() == 'stop':
        break
    try:
        numbers.append(int(s))
    except ValueError:
        print("Неверный ввод, повторите.")
print(numbers)

Пример взаимодействия:

Введите число (или 'stop'): 10
Введите число (или 'stop'): 25
Введите число (или 'stop'): stop
[10, 25]

Пример 6: Чтение чисел с плавающей точкой и последующее преобразование к целому (отсечение дробной части)

Иногда требуется округлить вниз (отбросить дробную часть) введённого вещественного числа.

Пример
f = float(input("Введите вещественное число: "))
i = int(f)
print("Целая часть:", i)

Ввод: 3.1415

Результат:

Целая часть: 3

Важно помнить, что int() отсекает дробную часть, а не округляет. Для математического округления следует использовать round().

Пример 7: Чтение чисел из файла с использованием list comprehension и обработкой исключений в одной строке (с помощью filter)

Пример
import sys
def safe_int(s):
    try:
        return int(s.strip())
    except ValueError:
        return None

numbers = [x for line in sys.stdin for x in [safe_int(line)] if x is not None]
print(numbers)

Фильтрация пропускает только те строки, которые успешно преобразуются в int.

Пример 8: Комбинирование ввода из нескольких источников

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

Пример
print("Введите первое число (с клавиатуры):")
first = int(input())
print("Введите второе число (из файла или консоли):")
second = int(input())
print("Сумма:", first + second)

При запуске с перенаправлением (python script.py < data.txt) первое число будет прочитано с клавиатуры, а второе - из файла (если в файле две строки).

Эти примеры демонстрируют гибкость int(input()) при работе с различными источниками данных и структурами ввода.

Пример использования int(input()) в Python - comments

En
Int input python пример (python)