Как проверить, что введена буква, а не число?

Решил изучить питон, скачал курс. Я совсем прям новичек, изучаю 3 день. Там было такое задание:

  1. Попросите пользователя ввести 2 числа.
  2. Сохраните в переменную результат деления первого числа на второе при условии, что делитель не равен 0. Если делитель равен 0, то сохранить в переменную строку: «бесконечность».
  3. Вывести пользователю ответ в таком виде: «ЧИСЛО_1 / ЧИСЛО_2 = ОТВЕТ». Примечание: разумеется, вместо «ЧИСЛО_1», «ЧИСЛО_2» и «ОТВЕТ» должны быть подставлены соответствующие переменные.

Видел тут 2 года назад уже задавали тот же вопрос, решения в теме я так и не нашел. Весь вечер ломал голову над 3 пунктом задания (наверно потому что занимался почти целый день) но так и не смог решить, а с утра проснулся, позавтракал сел и сразу же понял как выполнить данную задачу. Мне так же стало интересно, как добавить в этот код следущее "if" - если пользователь вводит букву а не число - вывести принт "Можно вводить только числа"

num1 = float(input("Введите первое число: "))
num2 = float(input("Введите второе число: "))
if num2 != 0:
    x = num1 / num2
    print(num1, "/", num2, "=", x)
else:
    print("Бесконечность")

Ответы (8 шт):

Автор решения: nomnoms12

В условие для оператора if можно подставить результат метода isnumeric. Данный метод вернёт True, если строка состоит только из числовых символов.

Но добавлять такую проверку нужно до преобразования строки в число, иначе возникнет исключение ValueError.

Пример:

num1 = input('Введите первое число: ')

if num1.isnumeric():
    num1 = float(num1)
else:
    print('Можно вводить только числа')

Вместо проверки через условие можно использовать обработку исключений. Это куда более надёжный вариант:

try:
    num1 = float(input('Введите первое число: '))

except ValueError:
    print('Недопустимый ввод')
→ Ссылка
Автор решения: vlados155

скажите можно ли добавить данную проверку через цикл while? что бы при вводе любого символа кроме числа, скрипт возвращал на строку "Введите первое число" ?

Будет работать только такой код, метод isnumeric() не распознаёт разделитель (точку) и возвращает False.

Примерно так:

def is_valid(n: list):
    if len(n) == 2:  # Если в числе одна точка
        for i in n:
            if not i.isdigit():
                return False
            return True
    else:
        return False
while True:
    num1 = input()
    num2 = input()
    nums1 = num1.split('.')  # создаём список, в котором хранится целая и дробная части числа (при вводе "2.222" в список имеет вид: ['2', '222']
    nums2 = num2.split('.')
    if is_valid(nums1) and is_valid(nums2):
        num1, num2 = float(num1), float(num2)
        break  # прерываем бесконечный цикл, если всё в порядке
    else:
        print('Вы можете ввести только числа!')  # требуем от пользователя ввести числа
if num2 != 0:
    x = num1 / num2
    print(num1, "/", num2, "=", x)
else:
    print("Бесконечность")

Функционал кода предусматривает проверку введённых значений на соответствие типу int и абсолютно работоспособен.

→ Ссылка
Автор решения: ПИТОНИСТ версия-3-8

Я сократил Ваш код и добавил проверку:

num1='a'
num2='a'
while not num2.isdigit() and not num1.isdigit(): num1=input('Введите число 1: '); num2=input('Введите число 2: ')
num1, num2 = float(num1), float(num2)
print(num1, "/", num2, "=", num1 / num2 if num2 != 0 else "Бесконечность")

Но можно оставить Ваш код:

num1='a'
num2='a'
while not num2.isdigit() and not num1.isdigit(): num1=input('Введите число 1: '); num2=input('Введите число 2: ')
num1, num2 = float(num1), float(num2)
if num2 != 0:
    x = num1 / num2
    print(num1, "/", num2, "=", x)
else:
    print("Бесконечность")
→ Ссылка
Автор решения: SergFSM

проверку с циклом можно еще сделать такими способами:

while True:
    try:
        num1 = float(input("Введите первое число: "))
        num2 = float(input("Введите второе число: "))
        break
    except:
        print('Ошибка ввода')
if num2 != 0:
    x = num1 / num2
    print(num1, "/", num2, "=", x)
else:
    print("Бесконечность")

или

while True:
    num1 = input("Введите первое число: ")
    num2 = input("Введите второе число: ")
    if num1.replace('.','',1).isdigit() and num2.replace('.','',1).isdigit(): 
        num1, num2 = float(num1), float(num2)
        break
    else: 
        print('Ошибка ввода')
if num2 != 0:
    x = num1 / num2
    print(num1, "/", num2, "=", x)
else:
    print("Бесконечность")
→ Ссылка
Автор решения: Stanislav Volodarskiy

Давайте напишем функцию которая печатает прилашение и читает строку. Если в строке вещественное число, функция его возвращает. Если нет, функция печатает сообщение об ошибке и начинает всё с начала. Блок try/except проверяет ввод самым непосредственным образом: пытается перевести строку в число.

def inputFloat(prompt=None):
    while True:
        s = input(prompt)
        try:
            return float(s)
        except ValueError:
            print('Ошибка. Ожидалось вещественное число.')


f = inputFloat('Введите число: ')
print('Вы ввели', f)
$ python input-float.py 
Введите число: 12ab
Ошибка. Ожидалось вещественное число.
Введите число: ab12
Ошибка. Ожидалось вещественное число.
Введите число: 123
Вы ввели 123.0

$ python input-float.py 
Введите число: 1e10
Вы ввели 10000000000.0
→ Ссылка
Автор решения: Эм Три
while True:
    try:
        num1 = float(input("Введите первое число:"))
        break
    except:
        print("Можно вводить только числа")
while True:
    try:
        num2 = float(input("Введите второе число:"))
        if num2 == 0:
            print("Нельзя делить на ноль")
        break
    except:
        print("Можно вводить только числа")
if num2 != 0:
    x = num1 / num2
    print(num1, "/", num2, "=", x)

Я решил немного изменить ваш вариант, который мне понравился, изменил так, чтобы проверка на число была при каждом введении. Так же хотел что бы при проверке второго числа, в случае если пользователь ввёл 0, скрипт вернул его к вводу второго числа с print("нельзя делить на ноль"). Тогда и в последней части скрипта отпадёт надобность задавать условие if на проверку неравенства нулю и можно будет сразу вывести print(x = num1 / num2), верно?

→ Ссылка
Автор решения: Эм Три

Единственный вариант который выполняет задачу вместо деления на 0 выводить принт о невозможности данной операции до которого я смог додуматься - вот такой:

while True:
    try:
        num1 = float(input("Введите первое число:"))
        break
    except:
        print("Можно вводить только числа")
while True:
    try:
        num2 = float(input("Введите второе число:"))
        break
    except:
        print("Можно вводить только числа")
if num2 == 0:
    print("Нельзя делить на ноль")
else:
    x = num1 / num2
    print(num1, "/", num2, "=", x)

Конечно код немного длиннее, но за то, при вводе первого числа отличного от float он не дает ввести второе значение (что уже помоему разумению лишено смысла, поскольку в первом значении уже введено неверное значение), а сразу сообщает п-лю о неверном вводе.

→ Ссылка
Автор решения: Егор Недведь

Условие:

  1. Попросите пользователя ввести 2 числа.
  2. Сохраните в переменную результат деления первого числа на второе при условии, что делитель не равен 0. Если делитель равен 0, то сохранить в переменную строку: «бесконечность».
  3. Вывести пользователю ответ в таком виде: «ЧИСЛО_1 / ЧИСЛО_2 = ОТВЕТ». Примечание: разумеется, вместо «ЧИСЛО_1», «ЧИСЛО_2» и «ОТВЕТ» должны быть подставлены соответствующие переменные.

Решение:

x1=float(input('vvedite 1 chislo '))

x2=float(input('vvedite 2 chislo '))

if x2 == 0:

    x3 = 'besconechnost'
else:

    x3=x1/x2  
print (x1,'/',x2, '=',x3)
→ Ссылка