Ввод информации в скриптах на Python: методы и примеры
Основы ввода данных в Python
Как получить данные от пользователя в Python?
Наиболее распространённый способ — использование встроенной функции input(). Она читает строку из стандартного потока ввода (клавиатура) и возвращает её в виде строки. Для получения данных другого типа (числа, списки) требуется явное преобразование.
name = input('Введите ваше имя: ')
print('Привет,', name)
age = int(input('Введите ваш возраст: '))
print('Через год вам будет', age + 1)программа python программа должна запрашивать (программа, которая запрашивает данные, на python)
Пояснение:
- Первая строка запрашивает имя и сохраняет его в переменную
nameкак строку. - Третья строка запрашивает возраст, но сразу преобразует результат в целое число с помощью
int(). - После преобразования с числом можно выполнять арифметические операции.
Типичные ошибки:
ValueError— если пользователь вводит нечисловое значение, а ожидается число. Решение: использовать блокtry/except.- Пустая строка — если пользователь сразу нажал Enter. Решение: проверять длину строки.
Как ввести несколько значений за один раз?
Если нужно ввести несколько данных, разделённых пробелами, применяется метод split() вместе с функцией map():
values = input('Введите два числа через пробел: ').split()
a, b = map(int, values)
print('Сумма:', a + b)
Объяснение:
.split()разбивает строку на список слов (по умолчанию по пробелам).map(int, values)применяет преобразование к каждому элементу списка.- Можно сразу присвоить переменным, если количество элементов известно.
Если введено меньше или больше значений, возникнет ошибка ValueError при распаковке. Решение: сохранять результат map в список и проверять его длину.
Как защитить программу от некорректного ввода?
Блок try/except позволяет перехватить исключение и дать пользователю возможность повторить ввод:
while True:
try:
number = int(input('Введите целое число: '))
break
except ValueError:
print('Ошибка! Введено не число. Попробуйте снова.')
Цикл while True выполняется, пока не будет успешного преобразования. Это гарантирует, что переменная number будет содержать корректное значение.
Если пользователь прервёт ввод (Ctrl+C), программа остановится. Можно добавить обработку KeyboardInterrupt.
Как вводить данные для олимпиадных задач?
Для быстрого чтения большого количества строк используют модуль sys.stdin. Метод sys.stdin.readline() читает одну строку, а sys.stdin.read() — весь поток до конца.
import sys
data = sys.stdin.read().split()
print('Введено чисел:', len(data))
Этот способ полезен, когда данные подаются из файла или через перенаправление ввода.
При использовании sys.stdin.read() программа будет ждать, пока не будет закрыт поток (например, по Ctrl+D в Unix).
Как запросить данные с явным указанием типа?
Можно написать функцию, которая запрашивает ввод до тех пор, пока не будет получено значение нужного типа:
def input_int(prompt):
while True:
try:
return int(input(prompt))
except ValueError:
print('Требуется целое число.')
a = input_int('Введите a: ')
b = input_int('Введите b: ')
print('Произведение:', a * b)
Такая функция повышает читаемость кода и уменьшает дублирование проверок.
Расширенные примеры ввода данных
Пример 1: Ввод чисел и вычисление среднего
Программа запрашивает три числа и выводит их среднее арифметическое.
numbers = []
for i in range(3):
while True:
try:
num = float(input(f'Введите число {i+1}: '))
numbers.append(num)
break
except ValueError:
print('Ошибка, введите число.')
average = sum(numbers) / len(numbers)
print(f'Среднее: {average:.2f}')
Введите число 1: 10 Введите число 2: 20 Введите число 3: 30 Среднее: 20.00
Пример 2: Ввод списка чисел и фильтрация
Пользователь вводит несколько чисел через пробел, программа оставляет только положительные.
raw = input('Введите числа через пробел: ')
try:
nums = list(map(float, raw.split()))
except ValueError:
print('Не все элементы являются числами.')
nums = []
positive = [x for x in nums if x > 0]
print('Положительные числа:', positive)
Введите числа через пробел: 5 -3 0 2.5 -1.2 8 Положительные числа: [5.0, 2.5, 8.0]
Пример 3: Ввод строки с проверкой длины
Запрос пароля, который должен содержать не менее 8 символов.
while True:
password = input('Придумайте пароль (не менее 8 символов): ')
if len(password) >= 8:
print('Пароль принят.')
break
else:
print('Слишком короткий пароль.')
Придумайте пароль (не менее 8 символов): 123 Слишком короткий пароль. Придумайте пароль (не менее 8 символов): qwerty12 Пароль принят.
Пример 4: Многострочный ввод до пустой строки
Программа читает строки, пока не будет введена пустая строка, и выводит их количество.
lines = []
print('Вводите строки. Для завершения оставьте строку пустой.')
while True:
line = input()
if line == '':
break
lines.append(line)
print(f'Введено строк: {len(lines)}')
Вводите строки. Для завершения оставьте строку пустой. Первая строка Вторая строка (Enter) Введено строк: 2
Пример 5: Использование sys.stdin.readline для быстрого ввода
Считывание n чисел из стандартного ввода (первая строка содержит n, затем сами числа).
import sys
first = sys.stdin.readline().strip()
if first:
n = int(first)
numbers = []
for _ in range(n):
numbers.append(int(sys.stdin.readline()))
print('Максимум:', max(numbers))
else:
print('Нет данных.')
Ввод: 3 10 20 15 Вывод: Максимум: 20