Как проверить, целое ли число в python?

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

Как проверить с помощью python, является ли число целым? Я рассматривал вариант вроде

import math
def isinteger(x):
   return x - math.truncate(x) == 0

Надо отметить, что проверка типа (type(x) == int) не подходит. Это связано с тем, что число может быть float (например, 6.00) Существует ли более изящный вариант (без импортирования модулей)?

Ответы

▲ 9Принят

Вот один из вариантов:

def isceloe(x):
    return x % 1 == 0

Здесь мы возвращаем True, если x делится без остатка на 1 (т. е. он - целое число), иначе (если не делится) - False.

А вообще-то функцию лучше назвать is_integer.

▲ 5

Разные способы и их результат на разных данных:

введите сюда описание изображения

Отсюда

▲ 1

float.is_integer:

$ python
Python 3.10.0 (default, Oct 16 2021, 12:17:56) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
@>>> (-2.0).is_integer()
True
@>>> (3.2).is_integer()
False

Если вы хотите обрабатывать разные типы (я не хочу, считаю это плохой практикой), то можно сделать так:

float(x).is_integer()

Это выражение правильно обработает любые целые и вещественные значения. И даже строки оно обработает, что плохо. Тогда строгий вариант:

    def is_integer(x):
        match x:
            case int():
                return True
            case float():
                return x.is_integer()
        raise TypeError()

Или так:

def is_integer(x):
    if isinstance(x, (int, float)):
        return float(x).is_integer()
    raise TypeError()

Или так:

def is_integer(x):
    if isinstance(x, float):
        return x.is_integer()
    if isinstance(x, int):
        return True
    raise TypeError()

На этом я останавливаюсь, так как в вопросе сказано

без импортирования модулей

▲ -1
def is_int(value):
    return isinstance(value, int) 

    
print(is_int(5))   # True
print(is_int(5.0)) # False
print(is_int("5")) # False