Чтение нескольких чисел с клавиатуры в Python

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

Ввод нескольких чисел с клавиатуры в Python

Наиболее эффективный способ ввода нескольких чисел с клавиатуры - использование функции input() в сочетании со строковым методом split() и функцией map(). Это позволяет одной строкой считать все числа, разделенные пробелами, и преобразовать их в целые (или вещественные) значения.

# Пример: ввод трёх чисел через пробел
numbers = list(map(int, input().split()))
print(numbers) # [10, 20, 30] если ввести '10 20 30'

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

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

Возможные проблемы:

  • Если ввести нечисловые данные, int() вызовет исключение ValueError.
  • При вводе чисел через запятую или другой разделитель split() по умолчанию не сработает правильно.
  • Пустая строка или строка только с пробелами приведет к пустому списку.

Решение: использовать явное разделение, обрабатывать исключения, проверять длину строки.

Вопрос: Как ввести несколько чисел на разных строках (построчно)?

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

n = int(input('Количество чисел: '))
numbers = []
for _ in range(n):
numbers.append(int(input()))

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

В этом примере сначала считывается целое число n - количество чисел. Затем в цикле n раз вызывается input() и каждое значение преобразуется и добавляется в список.

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

Решение: использовать обработку исключений или читать до конца потока (например, через sys.stdin).

Вопрос: Как ввести числа через разделитель, отличный от пробела (например, запятую)?

Если числа разделены запятыми, точками с запятыми или другими символами, метод split() можно вызвать с указанием разделителя.

# Ввод: '1,2,3'
numbers = list(map(int, input().split(',')))

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

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

Проблема: если ввести '1, 2, 3' с пробелами после запятой, split(',') даст ['1', ' 2', ' 3'] - пробелы останутся, и преобразование в int вызовет ошибку.

Решение: предварительно удалить пробелы, например, с помощью replace() или использовать регулярные выражения.

Вопрос: Как ввести несколько чисел, когда их количество заранее неизвестно, используя потоковый ввод?

Для чтения всех чисел из стандартного потока ввода (например, при передаче данных через конвейер или при вводе до нажатия Ctrl+D) применяется sys.stdin.read() или sys.stdin.buffer.

import sys
data = sys.stdin.read().split()
numbers = list(map(int, data))

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

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

Проблема: если ввод осуществляется с клавиатуры вручную, пользователь должен явно передать символ конца ввода (Ctrl+D в Unix, Ctrl+Z в Windows). Иначе программа может зависнуть в ожидании.

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

Вопрос: Как ввести числа, разделенные пробелами, но с возможными ошибками ввода (нечисловые символы)?

Чтобы программа не прерывалась при неверном вводе, можно использовать обработку исключений и фильтрацию.

line = input('Введите числа: ')
valid_numbers = []
for part in line.split():
try:
valid_numbers.append(int(part))
except ValueError:
print(f'Пропускаем "{part}" - не число')
print(valid_numbers)

Здесь каждое значение проверяется: если преобразование удалось - добавляется, иначе выводится сообщение.

Проблема: такой подход может скрывать реальные ошибки ввода. Лучше явно запрашивать корректные данные.

- Python config files (конфигурационные файлы в python)
- Python copy file (копирование файла в python)
- Python log file (логирование в файл в python)

Расширенные примеры ввода нескольких чисел с клавиатуры

Пример 1. Ввод чисел через запятую с очисткой пробелов

Пример
# Исходная строка: " 10, 20 , 30 "
raw = input("Введите числа через запятую: ")
cleaned = raw.replace(' ', '') # удаляем все пробелы
numbers = list(map(int, cleaned.split(',')))
print(numbers)
Ввод: 10, 20 , 30
Вывод: [10, 20, 30]

Замена пробелов упрощает обработку, но если в строке есть другие разделители, нужна более тщательная обработка.

Пример 2. Чтение чисел из нескольких строк до пустой строки

Пример
numbers = []
while True:
line = input("Введите число (Enter для завершения): ")
if not line:
break
numbers.append(int(line))
print(numbers)
Ввод: 5
Ввод: 10
Ввод: (пустая строка)
Вывод: [5, 10]

Позволяет вводить любое количество чисел без указания количества заранее.

Пример 3. Использование map с несколькими типами (целые и вещественные)

Пример
# Ввод: 3.14 42 2.718
data = input("Вводите числа: ").split()
mixed = []
for item in data:
try:
mixed.append(int(item))
except ValueError:
mixed.append(float(item))
print(mixed)
Ввод: 3.14 42 2.718
Вывод: [3.14, 42, 2.718]

Здесь сначала проверяется преобразование в int, затем в float. Если оба не удаются - выводится ошибка.

Пример 4. Пакетное чтение через sys.stdin с подсчетом суммы

Пример
import sys
data = sys.stdin.read().split()
numbers = list(map(int, data))
total = sum(numbers)
print(f"Сумма: {total}")
Ввод (через Ctrl+D):
1 2 3 4
Вывод: Сумма: 10

Подходит для быстрого ввода большого количества чисел.

Пример 5. Ввод чисел с проверкой и повторным запросом при ошибке

Пример
def get_int_list(message):
while True:
line = input(message)
parts = line.split()
try:
return [int(x) for x in parts]
except ValueError:
print("Ошибка: введите только целые числа, разделенные пробелами")

numbers = get_int_list("Введите целые числа: ")
print(numbers)
Ввод: 1 2 abc
Вывод: Ошибка: введите только целые числа, разделенные пробелами
Ввод: 1 2 3
Вывод: [1, 2, 3]

Ввод нескольких чисел с клавиатуры в Python - comments

En
Python ввести несколько чисел (python)