Получение данных от пользователя с помощью input()
Функция input() в Python 3
Функция input() читает одну строку из стандартного ввода и возвращает её как объект str. Приглашение выводится перед чтением. Завершающий символ новой строки в результат не входит.
Как получить строку от пользователя и показать её в ответе?
name = input('Имя: ')
print('Привет, ' + name + '!')функция input python 3 (функция input() в python 3)
Имя: Анна Привет, Анна!
переменная input python (сохранение ввода в переменную python)
Основной способ состоит из вызова input() и сохранения результата в переменной. Для соединения строк применяется оператор +. Если пользователь ничего не введёт, значение будет пустой строкой.
Далее рассмотрены варианты для чисел, нескольких значений, проверки данных и организации меню.
Как получить целое число, а не строку?
age_text = input('Возраст: ')
age = int(age_text)
print('Через год:', age + 1)
Возраст: 20 Через год: 21
Цель: преобразовать строку в int. Случай: возраст, количество, номер пункта. При неверном вводе возникает ValueError.
Как получить число с плавающей точкой?
price_text = input('Цена: ')
price = float(price_text)
print('С налогом:', price * 1.2)
Цена: 100 С налогом: 120.0
Цель: работать с дробными значениями. Случай: цена, расстояние, вес. Для десятичной запятой применяется замена запятой на точку.
Как прочитать несколько значений в одной строке?
data = input('Два числа: ').split()
a = int(data[0])
b = int(data[1])
print('Сумма:', a + b)
Два числа: 4 7 Сумма: 11
Цель: разбить строку на части. Случай: координаты, пары чисел, списки. Метод split() по умолчанию делит по пробелам.
Как безопасно обработать неверный ввод?
while True:
text = input('Целое число: ')
try:
value = int(text)
break
except ValueError:
print('Нужно целое число')
print('Квадрат:', value * value)
Целое число: abc Нужно целое число Целое число: 5 Квадрат: 25
Цель: не завершать программу при ошибке. Случай: интерактивные программы. Цикл повторяет запрос, пока преобразование не пройдёт.
Как завершить ввод специальным словом?
items = []
while True:
line = input('Строка или stop: ')
if line == 'stop':
break
items.append(line)
print(items)
Строка или stop: один Строка или stop: два Строка или stop: stop ['один', 'два']
Цель: собрать несколько строк. Случай: список дел, заметки, команды. Слово stop служит сигналом окончания.
Как получить пароль без отображения символов?
import getpass
password = getpass.getpass('Пароль: ')
print('Длина:', len(password))
Пароль: Длина: 8
Цель: скрыть ввод. Случай: пароли и секретные данные. Модуль getpass не показывает символы в терминале.
Как обработать конец файла или Ctrl+D?
try:
line = input()
except EOFError:
print('Ввод завершён')
Ввод завершён
Цель: корректно завершить чтение. Случай: запуск скрипта с перенаправленным вводом. Исключение EOFError возникает при отсутствии данных.
Проблема: input() всегда возвращает str. Сравнение строки и числа даёт неожиданный результат.
value = input('Число: ')
print(value == 5)
Число: 5 False
Решение: преобразование через int() или float().
Проблема: ValueError при преобразовании. Решение: try и except.
Проблема: лишние пробелы в начале и конце. Решение: strip().
text = input('Код: ').strip()
print(len(text))
Код: 123 3
Проблема: EOFError в неинтерактивном режиме. Решение: обработка исключения.
Проблема: пустая строка при нажатии Enter. Решение: проверка условия line == ''.
Расширенные примеры input() в Python 3
Ниже собраны подробные примеры с пояснениями. Каждый блок содержит код и результат.
Пример 1. Сумма чисел с плавающей точкой из одной строки.
line = input('Числа через пробел: ')
parts = line.split()
total = 0.0
for part in parts:
total += float(part)
print('Сумма:', total)
Числа через пробел: 1.5 2 3.5 Сумма: 7.0
Метод split() создаёт список строк. Цикл for поочерёдно преобразует каждую часть в float. Переменная total накапливает сумму. Если одна из частей не является числом, возникает ValueError.
Пример 2. Меню с выбором пункта.
print('1 - старт')
print('2 - настройки')
print('0 - выход')
choice = input('Пункт: ')
if choice == '1':
print('Старт')
elif choice == '2':
print('Настройки')
elif choice == '0':
print('Выход')
else:
print('Неизвестный пункт')
1 - старт 2 - настройки 0 - выход Пункт: 2 Настройки
Ввод сравнивается со строковыми значениями. Для числового выбора применяется int(choice). Обработка else показывает реакцию на неизвестный пункт.
Пример 3. Ввод нескольких строк до пустой строки.
lines = []
while True:
text = input('Строка: ')
if text == '':
break
lines.append(text)
print('Количество:', len(lines))
print(lines)
Строка: первый Строка: второй Строка: Количество: 2 ['первый', 'второй']
Пустая строка служит условием остановки. Список lines хранит введённые значения. Такой подход удобен для заметок или блока текста.
Пример 4. Ввод координат точки.
x_text, y_text = input('Координаты x y: ').split()
x = float(x_text.replace(',', '.'))
y = float(y_text.replace(',', '.'))
print('Точка:', x, y)
print('Квадрат расстояния:', x * x + y * y)
Координаты x y: 3,5 4 Точка: 3.5 4.0 Квадрат расстояния: 28.25
Распаковка двух значений идёт после split(). Замена запятой на точку помогает при вводе дробей в русской раскладке. Если частей не две, возникает ValueError.
Пример 5. Ввод словаря парами ключ=значение.
data = {}
while True:
pair = input('Пара ключ=значение или stop: ')
if pair == 'stop':
break
key, value = pair.split('=')
data[key.strip()] = value.strip()
print(data)
Пара ключ=значение или stop: имя=Анна
Пара ключ=значение или stop: город=Москва
Пара ключ=значение или stop: stop
{'имя': 'Анна', 'город': 'Москва'}
Метод split('=') делит строку на две части. Метод strip() удаляет пробелы вокруг ключа и значения. Если знак равенства отсутствует, возникает ValueError.
Пример 6. Проверка диапазона числа.
while True:
text = input('Оценка от 1 до 5: ')
try:
mark = int(text)
except ValueError:
print('Нужно число')
continue
if 1 <= mark <= 5:
break
print('Число вне диапазона')
print('Оценка:', mark)
Оценка от 1 до 5: 7 Число вне диапазона Оценка от 1 до 5: 4 Оценка: 4
Сначала проверяется преобразование, затем границы. Оператор continue возвращает к началу цикла. Такой шаблон часто применяется в формах.
Пример 7. Подтверждение yes или no.
answer = input('Продолжить? yes/no: ').lower()
if answer in ('yes', 'y', 'да', 'д'):
print('Продолжение')
elif answer in ('no', 'n', 'нет', 'н'):
print('Остановка')
else:
print('Неизвестный ответ')
Продолжить? yes/no: Да Продолжение
Метод lower() приводит ответ к нижнему регистру. Кортеж содержит допустимые варианты. Проверка in делает код коротким.
Пример 8. Чтение нескольких строк до конца файла.
import sys
lines = []
for line in sys.stdin:
lines.append(line.rstrip())
print('Строк:', len(lines))
print(lines)
Строк: 0 []
Цикл по sys.stdin читает все строки из потока. Метод rstrip() удаляет символ новой строки. В интерактивном терминале конец ввода задаётся через Ctrl+D в Linux или Ctrl+Z в Windows.
Пример 9. Ввод даты и преобразование.
from datetime import datetime
text = input('Дата в формате ДД.ММ.ГГГГ: ')
date = datetime.strptime(text, '%d.%m.%Y')
print('Год:', date.year)
print('День недели:', date.strftime('%A'))
Дата в формате ДД.ММ.ГГГГ: 31.12.2024 Год: 2024 День недели: Tuesday
Функция strptime разбирает строку по шаблону. При неверном формате возникает ValueError. Метод strftime возвращает название дня недели.
Пример 10. Ввод матрицы.
rows = int(input('Число строк: '))
matrix = []
for i in range(rows):
line = input('Строка ' + str(i + 1) + ': ')
row = [int(x) for x in line.split()]
matrix.append(row)
for row in matrix:
print(row)
Число строк: 2 Строка 1: 1 2 3 Строка 2: 4 5 6 [1, 2, 3] [4, 5, 6]
Первое число задаёт количество строк. Каждая следующая строка делится на элементы и преобразуется в int. Список списков представляет матрицу.
Пример 11. Интерактивный калькулятор.
a = float(input('Первое число: '))
op = input('Операция: ')
b = float(input('Второе число: '))
if op == '+':
result = a + b
elif op == '-':
result = a - b
elif op == '*':
result = a * b
elif op == '/':
if b == 0:
result = 'Деление на ноль'
else:
result = a / b
else:
result = 'Неизвестная операция'
print('Результат:', result)
Первое число: 10 Операция: * Второе число: 3 Результат: 30.0
Каждое значение читается отдельно. Для операции применяется строка. Проверка деления на ноль предотвращает ZeroDivisionError.
Пример 12. Ввод имени файла и проверка существования.
import os
path = input('Путь к файлу: ')
if os.path.exists(path):
size = os.path.getsize(path)
print('Размер:', size)
else:
print('Файл не найден')
Путь к файлу: data.txt Файл не найден
Модуль os проверяет наличие пути. Функция getsize возвращает размер в байтах. Если файл отсутствует, выводится сообщение.
Пример 13. Ввод списка чисел с ограничением количества.
count = int(input('Сколько чисел: '))
numbers = []
for i in range(count):
value = float(input('Число ' + str(i + 1) + ': '))
numbers.append(value)
print('Минимум:', min(numbers))
print('Максимум:', max(numbers))
Сколько чисел: 3 Число 1: 5 Число 2: -2 Число 3: 10 Минимум: -2.0 Максимум: 10.0
Количество задаётся заранее. Цикл for повторяется нужное число раз. Встроенные функции min и max находят крайние значения.
Пример 14. Ввод с таймаутом через select.
import select
import sys
print('Ожидание ввода 3 секунды')
ready, _, _ = select.select([sys.stdin], [], [], 3.0)
if ready:
line = sys.stdin.readline().rstrip()
print('Ввод:', line)
else:
print('Время вышло')
Ожидание ввода 3 секунды Время вышло
Модуль select проверяет готовность потока. Такой способ работает в Unix-подобных системах. В Windows поведение отличается.
Пример 15. Ввод секрета с подтверждением.
import getpass
first = getpass.getpass('Пароль: ')
second = getpass.getpass('Повтор: ')
if first == second and len(first) >= 8:
print('Пароль принят')
else:
print('Пароль не принят')
Пароль: Повтор: Пароль принят
Модуль getpass скрывает символы. Проверка сравнивает два ввода и длину. Условие можно расширить проверкой цифр и букв.