Ввод с клавиатуры в 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]