Как прописать проверку на переменную int или float
Пишу простенький калькулятор в качестве домашнего задания, нужно прописать проверку на то, что пользователь ввел именно цифры а не буквы в первом и втором значении. Постоянно выдает ошибку, пробовал и через try, except, не как не получается. else тоже не помогло. Подозреваю, что если переменная с типом данных int или float, проверку не получиться прописать. Подскажите пожалуйста кто знает в чем дело.
a = float(input("Введите первое значение: "))
operation = (input("Введите математический знак: "))
b = float(input("Введите второе значение: "))
if operation == "+":
result = a + b
print(f"Результат : {result}")
elif operation == "-":
result = a - b
print(f"Результат : {result}")
elif operation == "*":
result = a * b
print(f"Результат : {result}")
elif operation == "/":
try:
result = a / b
except ZeroDivisionError:
result = 0
print("На ноль делить нельзя")
print(f"Результат : {result}")
elif operation != ("+", "-", "*", "/"):
print("Введен некорректный математический знак")
Ответы (4 шт):
Преобразование во float нужно сделать внутри try except, а также можно сделать переменную, например, flag, которая будет индикатором успешности преобразования.
Далее в зависимости от успешности преобразования проводить вычисления или сообщить о том, что данные некорректны
a = input("Введите первое значение: ")
operation = (input("Введите математический знак: "))
b = input("Введите второе значение: ")
flag = True
try:
a, b = float(a), float(b)
except:
flag = False
if flag:
print('Вычисляем...')
else:
print('Не все введенные данные - числа. Не вычисляем')
Введите первое значение: 123
Введите математический знак: +
Введите второе значение: nmnm
Не все введенные данные - числа. Не вычисляем
float предполагает ввод не только целых чисел, а значит содержащих плавающую запятую/точку - 3.1415
кроме того и int и float можно вводить в экспоненциальном видел 123e3
поэтому если нужны только целые числа, то можно сделать так:
t = input()
is_int = (len(t) > 1 and t[1:].isdigit() and (t[0].isdigit() or t[0] == '-')) or t.isdigit()
изврат конечно
можно и так, если надо и целые и с плавающей запятой и если между ними надо видеть разницу
t = input()
try:
v = float(t)
except:
return False
if int(v) != v:
return False
Можно так, используя all, map и lambda:
s = input()
is_int = all(map(lambda l: l.isdigit(), s))
print(is_int)
Можно использовать метод isdigit() для проверки того, что пользователь ввел только цифры. Например:
a = input("Введите первое значение: ")
while not a.isdigit():
a = input("Ошибка! Введите первое значение еще раз: ")
a = float(a)
b = input("Введите второе значение: ")
while not b.isdigit():
b = input("Ошибка! Введите второе значение еще раз: ")
b = float(b)
operation = input("Введите математический знак: ")
if operation == "+":
result = a + b
print(f "Результат : {result}")
elif operation == "-":
result = a - b
print(f "Результат : {result}")
elif operation == "*":
result = a * b
print(f "Результат : {result}")
elif operation == "/":
try:
result = a / b
print(f "Результат : {result}")
except ZeroDivisionError:
print("На ноль делить нельзя")
else:
print("Введен некорректный математический знак")