Проверка на целое число
На ввод дается два чилса в одной строчке через пробел, Нужно проверить целые они или нет, если нет, то вывести:"Неправильный формат ввода". Вот мой код:
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 шт):
Тут двоякая ситуация
если надо проверить, что некоторое число является целым, то можно сделать так:
value = 2.0 print(float(value) == int(value))если же надо определить, что ввели именно целое число или число с плавающей запятой, то можно сделать более хитро:
text = "2.0" exec(f"value = {text}") print(isinstance(value, float))
Не такая простая задача если решать её полностью. Есть три с половиной варианта:
целое число (0, -33, 16, 1_000_000)
-
вещественное число (0.1, -123.4, 12e-1, 12.345e2).
вещественное число c целым значением (1.0, -16.0, 12.34e2)
непонятно что (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'