Глиф Учебники

input возвращает строку: как ввести число

Справочник · Python · 1 минута чтения

input() всегда возвращает строку, даже если набраны цифры. Чтобы получить число, ввод переводят функцией int (целое) или float (дробное):

Python
a = int(input())
b = int(input())
print(a + b)
Ввод
2
3
Вывод
5

Без int строки бы склеились:

Python
a = input()
b = input()
print(a + b)
Ввод
2
3
Вывод
23

Ошибки и что они значат

TypeError: can only concatenate str (not "int") to str — к строке из input прибавили число: input() + 1. Переведите ввод в число: int(input()) + 1.

TypeError: '>' not supported between instances of 'str' and 'int' — строку сравнили с числом: if input() > 5. Решение то же — int(input()).

ValueError: invalid literal for int() with base 10: '3.5' — int получил дробное число. Если ждёте дробное, используйте float(input()). Если нужно именно целое из дробной записи — int(float(input())) (дробная часть отбросится).

ValueError: invalid literal for int() with base 10: '' — нажали Enter, ничего не набрав.

ValueError: invalid literal for int() with base 10: '2 3' — в одной строке набрано два числа, а int переводит только одно. Как прочитать несколько — в справке Как ввести несколько чисел в одной строке.

ValueError: could not convert string to float: '3,5' — дробная часть отделена запятой. Python понимает только точку. Если пользователи будут вводить запятую, замените её:

Python
x = float(input().replace(",", "."))
print(x * 2)
Ввод
3,5
Вывод
7.0

Пробелы по краям не мешают

int и float сами отбрасывают пробелы в начале и в конце, поэтому int(" 42 ") даёт 42. Мешают только пробелы между цифрами и посторонние знаки.

Ввод без ошибок

Чтобы программа не останавливалась от неверного ввода, ошибку перехватывают и спрашивают снова:

Python
while True:
    text = input()
    try:
        n = int(text)
        break
    except ValueError:
        print("Это не целое число:", text)
print("Принято:", n)
Ввод
десять
10.5
10
Вывод
Это не целое число: десять
Это не целое число: 10.5
Принято: 10

Как устроены try и except, рассказано в уроке Файлы и исключения.

Проверка без try

Метод isdigit проверяет, что строка состоит только из цифр:

Python
for text in ["42", "-5", "3.5", "abc"]:
    print(text, text.isdigit())
Вывод
42 True
-5 False
3.5 False
abc False

Для неотрицательных целых этого хватает, но минус и точку isdigit за цифры не считает. Для отрицательных и дробных чисел надёжнее try и except.