Ввод с клавиатуры в Python: от простых строк до сложных структур

Раздел: Основы Python -> Синтаксис

Основы ввода: функция input()

Основным и наиболее употребимым способом получения данных от пользователя в Python является функция input(). Она приостанавливает выполнение программы, выводит подсказку (если передать строку-аргумент) и ожидает ввода с клавиатуры до нажатия клавиши Enter. Возвращаемое значение всегда имеет тип str, даже если пользователь ввёл число или другой символ.

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

Python method (методы в python)

Ввод: Алексей
Привет, Алексей

напишите оператор ввода в python (оператор ввода в python)

Подсказка передаётся как аргумент:

age = input('Сколько вам лет? ')
print('Вам', age, 'года')

Python синтаксис input (синтаксис функции input)

Сколько вам лет? 25
Вам 25 года

Обратите внимание: даже если ввести 25, переменная age останется строкой. Для числовых операций требуется преобразование типа.

Как ввести целое число?

Для получения целого числа используется функция int(), оборачивающая результат input().

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

Проблема: если пользователь введёт не целое число (например, букву или дробь), возникнет исключение ValueError. Решение: обернуть ввод в блок try-except.

try:
    n = int(input('Число: '))
except ValueError:
    print('Ошибка: ожидалось целое число')

Как ввести вещественное число?

Используется функция float(). Аналогичные риски возникновения ValueError.

x = float(input('Введите дробное число: '))

Ошибка возникает также при вводе чисел, использующих запятую как десятичный разделитель (вместо точки). В российской локализации может потребоваться замена запятой на точку.

Как ввести несколько значений через пробел?

Метод split() разделяет строку на список слов по пробелам.

a, b, c = input('Три числа через пробел: ').split()
print(a, b, c)  # все равно строки

Для получения чисел применяют map():

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

Проблема: если количество введённых значений не совпадает с количеством переменных, возникнет ValueError. Решение: сохранить результат split() в список и проверить длину.

Как ввести значения с другим разделителем (запятая, точка с запятой)?

В метод split() передаётся строка-разделитель.

data = input('Введите через запятую: ').split(',')
print(data)

После split() каждый элемент остаётся строкой; возможно, потребуется удалить лишние пробелы с помощью strip().

cleaned = [item.strip() for item in input().split(',')]

Как ввести данные из стандартного потока (sys.stdin)?

Более низкоуровневый способ - модуль sys. Метод sys.stdin.readline() читает одну строку, sys.stdin.read() - весь ввод до EOF.

import sys
line = sys.stdin.readline().strip()

Этот способ удобен при перенаправлении ввода из файла или при конвейерной обработке.

Ошибка: если ввод отсутствует, readline() вернёт пустую строку, read() - пустую строку. Необходимо проверять наличие данных.

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

Модуль getpass предоставляет функцию getpass(), скрывающую ввод.

from getpass import getpass
pwd = getpass('Пароль: ')

Важно: эта функция работает только в терминале; в IDE может отображаться ввод.

Как ввести многострочный текст?

Организуется цикл while, который читает строки до тех пор, пока не встретит пустую строку или другую метку.

lines = []
while True:
    line = input()
    if line == '':
        break
    lines.append(line)
text = '\n'.join(lines)

Также можно использовать sys.stdin.read(), если заранее известен конец ввода (например, Ctrl+D в Unix).

Общие ошибки и способы их решения

  • ValueError при преобразовании типов - обёртка try-except.
  • EOFError при неожиданном конце файла (когда input() вызывается, а ввода нет) - обрабатывается исключением или проверкой наличия строки.
  • Лишние пробелы в начале/конце строки - использовать метод strip().
  • Пустая строка при вводе - проверить длину или сравнить с пустой строкой.
  • Некорректный разделитель при split() - проверить фактические символы.

Расширенные примеры ввода

Пример
# Пример 1: ввод списка чисел с проверкой корректности
def get_ints():
    while True:
        raw = input('Введите целые числа через пробел: ')
        parts = raw.split()
        try:
            nums = list(map(int, parts))
            return nums
        except ValueError:
            print('Ошибка: все элементы должны быть целыми числами')

numbers = get_ints()
print('Сумма:', sum(numbers))
Введите целые числа через пробел: 1 2 три
Ошибка: все элементы должны быть целыми числами
Введите целые числа через пробел: 10 20 30
Сумма: 60
Пример
# Пример 2: ввод данных с использованием sys.stdin.read()
import sys

data = sys.stdin.read()
lines = data.strip().split('\n')
print('Количество строк:', len(lines))

Запуск с перенаправлением: python script.py < input.txt

Пример
# Пример 3: ввод даты в формате ДД.ММ.ГГГГ с проверкой
from datetime import datetime

date_str = input('Введите дату (ДД.ММ.ГГГГ): ')
try:
    dt = datetime.strptime(date_str, '%d.%m.%Y')
    print('Дата корректна:', dt.date())
except ValueError:
    print('Неверный формат даты')
Введите дату (ДД.ММ.ГГГГ): 31.02.2023
Неверный формат даты
Пример
# Пример 4: ввод через цикл с накоплением до ключевого слова 'стоп'
data = []
print('Вводите данные (для завершения введите "стоп"):')
while True:
    entry = input()
    if entry.lower() == 'стоп':
        break
    data.append(entry.strip())
print('Собрано', len(data), 'строк')
Вводите данные (для завершения введите "стоп"):
первая строка
вторая строка
стоп
Собрано 2 строк
Пример
# Пример 5: чтение пароля с маскировкой символов (getpass)
from getpass import getpass

login = input('Логин: ')
password = getpass()
print('Получены учётные данные для', login)

В терминале пароль не отображается; в некоторых средах разработки может быть виден.

Пример
# Пример 6: ввод с автоматическим удалением пробелов и преобразованием регистра
name = input('Введите имя: ').strip().capitalize()
print('Отформатированное имя:', name)
Введите имя:   иВАН  
Отформатированное имя: Иван
Пример
# Пример 7: множественный ввод с помощью list comprehension
squares = [int(x)**2 for x in input('Числа через пробел: ').split()]
print('Квадраты:', squares)
Числа через пробел: 1 2 3 4
Квадраты: [1, 4, 9, 16]

Оператор ввода в Python - comments

En
напишите оператор ввода в python (python)