Пользовательский ввод (input) в Python
Обычно программа работает по такой схеме: получает входные данные → обрабатывает их → выдает результат. Ввод может поступать как непосредственно от пользователя через клавиатуру, так и через внешний источник (файл, база данных).
В стандартной библиотеке Python 3 есть встроенная функция input()
(в Python 2 это raw_input()
), которая отвечает за прием пользовательского ввода. Разберемся, как она работает.
Чтение ввода с клавиатуры
Функция input([prompt])
отвечает за ввод данных из потока ввода:
s = input()
print(f"Привет, {s}!")
> мир # тут мы с клавиатуры ввели слово "мир"
> Привет, мир!
👉 В этом примере:
- При вызове функции
input()
выполнение программы приостанавливается до тех пор, пока пользователь не введет текст на клавиатуре (приложение может ждать бесконечно долго). - После нажатия на
Enter
, функцияinput()
считывает данные и передает их приложению (символ завершения новой строки не учитывается). - Полученные данные присваиваются переменной и используются дальше в программе.
input()
всегда возвращает строку:
s = input()
print(type(s))
> 2
> <class 'str'>
Также у input есть необязательный параметр prompt
– это подсказка пользователю перед вводом:
name = input("Введите имя: ")
print(f"Привет, {name}!")
> Введите имя: Вася
> Привет, Вася!
📃 Более подробное описание функции из документации:
def input([prompt]):
"""
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
"""
pass
Преобразование вводимых данных
Данные, введенные пользователем, попадают в программу в виде строки, поэтому и работать с ними можно так же, как и со строкой. Если требуется организовать ввод цифр, то строку можно преобразовать в нужный формат с помощью функций явного преобразования типов.
☝️ Важно: если вы решили преобразовать строку в число, но при этом ввели строку (например: test), возникнет ошибка:
ValueError: invalid literal for int() with base 10: 'test'
На практике такие ошибки нужно обрабатывать через try except
. В примере ниже пользователь будет вводить данные до тех пор, пока они успешно не преобразуются в число.
def get_room_number():
while True:
try:
num = int(input("Введите номер комнаты: "))
return num
except ValueError:
print("Вы ввели не число. Повторите ввод")
room_number = get_room_number()
print(f"Комната {room_number} успешно забронирована!")
> Введите номер комнаты: test
> Вы ввели не число. Повторите ввод
> Введите номер комнаты: 13
> Комната 13 успешно забронирована!
Input() → int
Для преобразования в целое число используйте функцию int()
. В качестве аргумента передаются данные которые нужно преобразовать, а на выходе получаем целое число:
age_str = input("Введите ваш возраст: ")
age = int(age_str)
print(age)
print(type(age))
> Введите ваш возраст: 21
> 21
> <class 'int'>
То же самое можно сделать в одну строку: age = int(input("Введите ваш возраст: "))
.
Input() → float
Если нужно получить число с плавающей точкой (не целое), то его можно получить с помощью функции float()
.
weight = float(input("Укажите вес (кг): "))
print(weight)
print(type(weight))
> Укажите вес (кг): 10.33
> 10.33
> <class 'float'>
Input() → list (список)
Если в программу вводится информация, которая разделяется пробелами, например, "1 word meow", то ее легко преобразовать в список с помощью метода split()
. Он разбивает введенные строки по пробелам и создает список:
list = input().split()
print(list)
print(type(list))
> 1 word meow
> ['1', 'word', 'meow']
> <class 'list'>
💭 Обратите внимание, что каждый элемент списка является строкой. Для преобразования в число, можно использовать int()
и цикл for.
Например, так:
int_list = []
for element in input().split():
int_list.append(int(element))
print([type(num) for num in int_list])
> 1 2 3
> [<class 'int'>, <class 'int'>, <class 'int'>]
Ввод в несколько переменных
Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:
a, b, c = input().split()
print(f"a: {a}, b: {b}, c: {c}")
> test 13 100
> a: test, b: 13, c: 100
В этом примере строка из input()
разбивается по пробелу функцией split()
. Далее применяется синтаксис распаковки – каждый элемент списка попадает в соответствующую переменную.
Все переменные после распаковки будут строкового типа. Преобразовать их (например в int) можно так:
a, b = [int(s) for s in input().split()]
print(f"type a: {type(a)}, type b: {type(b)}")
> 13 100
> type a: <class 'int'>, type b: <class 'int'>
☝️ Важно: не забывайте обрабатывать ошибки:
- если введенных значений больше чем переменных, получите ошибку –
ValueError: too many values to unpack (expected 3)
; - если введенных значений меньше чем переменных, получите ошибку –
ValueError: not enough values to unpack (expected 3, got 2)
; - если преобразовываете в int, а вводите строку –
ValueError: invalid literal for int() with base 10: 'test'
.
В этом руководстве вы узнали, как принимать данные от пользователя, введенные с клавиатуры, научились преобразовывать данные из input и обрабатывать исключения.
Классно
# Спасибо! Благодаря этому уроку я написал программу про футбол a, b, c, d = input().split() print(f"{a} - {int(c)} очка {b}: {int(d)} очка") print() if c > d: print(a, ' ПОБЕДИЛО СО счетом ', c, ' : ', d) else: print(b, ' ПОБЕДИЛО СО счетом ', d, ' : ', c)
pr = "jlkjjjljj" input(pr)
ПОЧЕМУ НИЧЕГО НЕ ВЫВОДИТ????!!!!!
Помогите пожалуйста!
должен выводить:
jlkjjjljj с инпутом
А у вас что происходит?
R = [1, 2, 3, 4, 5] E = input("введи - ") print(E)
Привет, если я ввожу в input "R", на выводе получаю просто строку "R". Можно ли как то ввести "R" и на выводе получить список [1, 2, 3, 4, 5]
input()
всегда возвращает строку и не знает ничего о ваших переменных. В вашем случае вы вводите строку "R", она прилетает в переменнуюE
и выводится функциейprint()
как строка.Можете сделать так:
R = [1, 2, 3, 4, 5] E = input("введи - ") if E == "R": print(R) > введи - R > [1, 2, 3, 4, 5]
имба
Типо что-то среднее пон и не