Ввод двух значений: руководство по input
Варианты ввода двух переменных a и b в Python
Как ввести два числа через пробел в одной строке?
Основной способ ввода нескольких чисел в Python - использование метода split() и функции map(). Пользователь вводит строку, содержащую числа, разделенные пробелами. Метод split() разбивает строку на список подстрок по пробелам. Функция map() преобразует каждую подстроку в целое число. Затем происходит распаковка в переменные a и b.
a, b = map(int, input().split())
print(f"a = {a}, b = {b}")Python a b input (ввод двух переменных a и b в python)
Ввод: 10 20 Вывод: a = 10, b = 20
Возможные проблемы: Если ввести больше двух чисел, возникнет ошибка «ValueError: too many values to unpack». Если меньше двух – «ValueError: not enough values to unpack». Решение: перед распаковкой проверить количество элементов или использовать звездочку для сбора оставшихся:
numbers = list(map(int, input().split()))
if len(numbers) != 2:
print("Необходимо ввести ровно два числа")
else:
a, b = numbers
Как ввести каждое число с новой строки?
Если требуется вводить числа по одному на каждой строке, используют два вызова input(). Каждое значение преобразуется отдельно. Это удобно, когда пользователю нужно видеть подсказки для каждой переменной.
a = int(input("Введите a: "))
b = int(input("Введите b: "))
print(f"a = {a}, b = {b}")
Введите a: 10 Введите b: 20 a = 10, b = 20
При вводе нечислового значения возникнет ошибка ValueError. Для обработки ошибок можно использовать try/except.
Как ввести числа, разделенные запятой?
Метод split() принимает разделитель. Если числа вводятся через запятую с пробелами, их можно удалить с помощью strip() или использовать split(',') с последующей очисткой.
a, b = map(int, input().split(',')) # запятая без пробелов
# если есть пробелы: a, b = map(int, input().replace(' ', '').split(','))
Ввод: 10,20 Вывод: a = 10, b = 20 Ввод: 10, 20 Вывод: ValueError: invalid literal for int() with base 10: ' 20'
При наличии пробелов после запятой нужно удалять лишние символы. Лучше использовать split(',') и затем strip() для каждого элемента.
Как защититься от неверного ввода?
Обернуть преобразование в блок try/except, и повторять запрос до получения корректных значений.
while True:
try:
a, b = map(int, input("Введите два числа через пробел: ").split())
break
except ValueError:
print("Ошибка: введите ровно два целых числа.")
Как проверить, что введено ровно два числа?
Получить список чисел, затем проверить его длину.
values = list(map(int, input().split()))
if len(values) != 2:
print("Введите два числа, разделенных пробелом.")
else:
a, b = values
Как ввести числа с использованием sys.stdin для скорости?
При большом количестве вводимых данных используют sys.stdin.readline, которая быстрее input().
import sys
data = sys.stdin.readline().split()
a, b = map(int, data)
Важно помнить, что sys.stdin.readline возвращает строку с символом новой строки, но split() его удаляет.
Как извлечь числа из строки с помощью регулярных выражений?
Если ввод содержит лишние символы, можно использовать re.findall для поиска всех чисел.
import re
numbers = list(map(int, re.findall(r'-?\d+', input())))
a, b = numbers[:2] # взять первые два
Расширенные примеры ввода двух переменных
Здесь собраны дополнительные сценарии и нестандартные подходы к вводу двух чисел.
Пример 1. Ввод чисел с плавающей точкой
a, b = map(float, input().split())
print(f"a = {a:.2f}, b = {b:.2f}")
Ввод: 3.14 2.71 Вывод: a = 3.14, b = 2.71
Пример 2. Ввод чисел через точку с запятой
a, b = map(int, input().split(';'))
print(a + b)
Ввод: 5;10 Вывод: 15
Пример 3. Использование спискового включения
numbers = [int(x) for x in input().split()]
a, b = numbers
Пример 4. Безопасный ввод с помощью ast.literal_eval
Пользователь может ввести кортеж вида (10, 20).
import ast
try:
a, b = ast.literal_eval(input("Введите два числа через запятую в скобках: "))
print(f"a = {a}, b = {b}")
except:
print("Ошибка формата")
Пример 5. Ввод нескольких пар чисел с помощью цикла
n = int(input("Сколько пар ввести? "))
pairs = []
for _ in range(n):
a, b = map(int, input().split())
pairs.append((a, b))
print(pairs)
Ввод: 2 1 2 3 4 Вывод: [(1, 2), (3, 4)]
Пример 6. Ввод с обработкой лишних пробелов
a, b = map(int, input().strip().split())
Пример 7. Использование maxsplit для ограничения количества разделений
first, rest = input().split(maxsplit=1)
a = int(first)
b = int(rest.strip()) # если rest содержит еще пробелы
Пример 8. Ввод чисел из строки с несколькими разделителями
import re
line = input()
numbers = [int(x) for x in re.split(r'[,\s;]+', line) if x]
a, b = numbers[:2]
Ввод: 10, 20; 30 40 Вывод: a=10, b=20
Пример 9. Использование генератора для ленивого чтения
it = iter(input().split())
a = int(next(it))
b = int(next(it))
Пример 10. Ввод с помощью eval (только для контролируемого окружения)
a, b = eval(input("Введите a, b: ")) # например, 10, 20
Внимание: eval может выполнить произвольный код, поэтому использовать его не рекомендуется. Для безопасного ввода используйте ast.literal_eval.