Как прописать проверку на переменную int или float

Рейтинг: 0Ответов: 4Опубликовано: 29.03.2023

Пишу простенький калькулятор в качестве домашнего задания, нужно прописать проверку на то, что пользователь ввел именно цифры а не буквы в первом и втором значении. Постоянно выдает ошибку, пробовал и через 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("Введен некорректный математический знак")

Ответы

▲ 0Принят

Можно использовать метод 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("Введен некорректный математический знак")

▲ 2

Преобразование во 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
Не все введенные данные - числа. Не вычисляем
▲ 1

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
▲ 1

Можно так, используя all, map и lambda:

s = input()
is_int = all(map(lambda l: l.isdigit(), s))
print(is_int)