Проверка на целое число

На ввод дается два чилса в одной строчке через пробел, Нужно проверить целые они или нет, если нет, то вывести:"Неправильный формат ввода". Вот мой код:

a, b = map(int, input().split())

if int(a)/float(a)==1.0:
    print('является целым числом')
else:
    print('не целое число.')

if int(b)/float(b)==1.0:
    print('является целым числом')
else:
    print('не целое число.')

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

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

Тут двоякая ситуация

  1. если надо проверить, что некоторое число является целым, то можно сделать так:

     value = 2.0
    
     print(float(value) == int(value))
    
  2. если же надо определить, что ввели именно целое число или число с плавающей запятой, то можно сделать более хитро:

     text = "2.0"
    
     exec(f"value = {text}")
    
     print(isinstance(value, float))
    
→ Ссылка
Автор решения: Stanislav Volodarskiy

Не такая простая задача если решать её полностью. Есть три с половиной варианта:

  1. целое число (0, -33, 16, 1_000_000)

    • вещественное число (0.1, -123.4, 12e-1, 12.345e2).

    • вещественное число c целым значением (1.0, -16.0, 12.34e2)

  2. непонятно что (123s, abracadabra, 1O0).

Целое число распознает int(s). Если s строка с целым числом внутри, то вернётся его значение, иначе будет выброшено исключение ValueError.

Вещественное число распознает float(s). И тоже выбросит исключение в случае неправильного формата.

Для проверки целочисленного значения вещественного числа пригодится метод is_integer.

В третий пункт попадает всё что вообще не выглядит как число.

Проверка на целое число должна идти до проверки на вещественное, иначе все целые числа будут записаны в вещественные.

def as_int(s):
    try:
        return int(s)
    except ValueError:
        return None

def as_float(s):
    try:
        return float(s)
    except ValueError:
        return None

def main():
    s = input()
    i = as_int(s)
    if i is not None:
        print('int', repr(s), i)
        return

    f = as_float(s)
    if f is not None:
        print('float', repr(s), f)
        if f.is_integer():
            print('... of integer value')
        return

    print('???', repr(s))


main()

Тест:

$ python is_integer.py
1_000_000
int '1_000_000' 1000000

$ python is_integer.py
0
int '0' 0

$ python is_integer.py
-33
int '-33' -33

$ python is_integer.py
16
int '16' 16

$ python is_integer.py
0.1
float '0.1' 0.1

$ python is_integer.py
-123.4
float '-123.4' -123.4

$ python is_integer.py
12e-1
float '12e-1' 1.2

$ python is_integer.py
12.345e2
float '12.345e2' 1234.5

$ python is_integer.py
1.0
float '1.0' 1.0
... of integer value

$ python is_integer.py
-16.0
float '-16.0' -16.0
... of integer value

$ python is_integer.py
12.34e2
float '12.34e2' 1234.0
... of integer value

$ python is_integer.py
123s
??? '123s'

$ python is_integer.py
abracadabra
??? 'abracadabra'

$ python is_integer.py
1O0
??? '1O0'
→ Ссылка