input возвращает строку: как ввести число
input() всегда возвращает строку, даже если набраны цифры. Чтобы получить число, ввод переводят функцией int (целое) или float (дробное):
a = int(input())
b = int(input())
print(a + b)2
35Без int строки бы склеились:
a = input()
b = input()
print(a + b)2
323Ошибки и что они значат
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 понимает только точку. Если пользователи будут вводить запятую, замените её:
x = float(input().replace(",", "."))
print(x * 2)3,57.0Пробелы по краям не мешают
int и float сами отбрасывают пробелы в начале и в конце, поэтому int(" 42 ") даёт 42. Мешают только пробелы между цифрами и посторонние знаки.
Ввод без ошибок
Чтобы программа не останавливалась от неверного ввода, ошибку перехватывают и спрашивают снова:
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 проверяет, что строка состоит только из цифр:
for text in ["42", "-5", "3.5", "abc"]:
print(text, text.isdigit())42 True
-5 False
3.5 False
abc FalseДля неотрицательных целых этого хватает, но минус и точку isdigit за цифры не считает. Для отрицательных и дробных чисел надёжнее try и except.