Как найти целые числа в python

Чтобы проверить является ли строка введённая пользователем целым числом, можно воспользоваться int в try/except, похожим образом как показано в ответе на вопрос «Python 3 Проверка на дробное число введённое пользователем», порекомендованный @Alex.B, заменив float на int как @gil9red предложил и @slippyk явно показал:

def isint(s):
    try:
        int(s)
        return True
    except ValueError:
        return False

Пример:

>>> isint('10')
True
>>> isint('a') # не десятичная цифра
False
>>> isint('²') # верхний индекс
False
>>> isint('১') # Bengali (Unicode)
True

Это может сломаться, если ввод не строка, например:

>>> isint(0.5) # XXX не работает для float
True
>>> 0.5 .is_integer()
False
>>> from numbers import Integral
>>> isinstance(0.5, Integral)
False
>>> isinstance(123, Integral)
True
>>> isinstance(1., Integral) # XXX float
False
>>> 1..is_integer()          # но целое значение
True
>>> from fractions import Fraction
>>> isint(Fraction(1, 2)) # XXX не работает для дробей
True
>>> isinstance(Fraction(1, 2), Integral) 
False
>>> isinstance(Fraction(1), Integral) # XXX дробь 
False
>>> Fraction(1) == 1                  # даже если целое значение
True

См. How to check if a float value is a whole number.


Если вы хотите проверить, что переданная строка содержит только десятичные цифры и ничего более (к примеру, нет '+','-', ' ', 'n' символов в ней), то можно str.isdecimal использовать:

>>> '123'.isdecimal()
True
>>> '+123'.isdecimal()
False
>>> isint('+123')
True
>>> isint(' 123n')
True
>>> ' 123n'.isdecimal()
False

isdecimal() можно использовать, чтобы имена файлов, содержащие цифры, в «естественном» порядке отсортировать (как Windows-проводнике). См. Python analog of natsort function (sort a list using a “natural order” algorithm).


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

>>> import re
>>> from datetime import datetime
>>> date_string = '2016-11-01 23:04:05'
>>> datetime(*map(int, re.findall(r'd+', date_string)))
datetime.datetime(2016, 11, 1, 23, 4, 5)

Последнее, это возможно более простой, менее строгий (и эффективный) вариант для:

>>> datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')
datetime.datetime(2016, 11, 1, 23, 4, 5)

Если вы хотите разрешить задавать целые числа в произвольном основании как в исходном коде Питона, то передайте base=0:

>>> int('0b1110', 0) # binary ("01")
14
>>> int('0xcafe', 0) # hexadecimal
51966

Подробнее в документации int.

I would like to determine if a numeric value in Python is a whole number. For example, given:

y = x / 3

I want to distinguish between values of x which are evenly divisible by 3 those which are not.

Ron Zhang's user avatar

Ron Zhang

1951 gold badge3 silver badges16 bronze badges

asked Jun 4, 2011 at 23:17

johntheripper's user avatar

5

Integers have no decimals. If you meant «check if a number got decimals in Python», you can do:

not float(your_number).is_integer()

answered Jun 4, 2011 at 23:22

Artur Gaspar's user avatar

Artur GasparArtur Gaspar

4,3971 gold badge26 silver badges28 bronze badges

2

if x % 3 == 0:
    print 'x is divisible by 3'

answered Jun 4, 2011 at 23:22

interjay's user avatar

interjayinterjay

106k21 gold badges267 silver badges251 bronze badges

6

Edit: As Ollie pointed out in the comment below this post, is_integer is part of the standard library and should therefore not be reimplemented as I did below.

This function uses the fact that every other whole number will have at least one number divisible by two with no remainder. Any non-zero fractional representation in either n or n+1 will cause both n%2 and (n+1)%2 to have a remainder. This has the benefit that whole numbers represented as float values will return True.
The function works correctly for positive
and negative numbers and zero as far as I can determine. As mentioned in the function, it fails for values very close to an integer.

def isInteger(n):
    """Return True if argument is a whole number, False if argument has a fractional part.

    Note that for values very close to an integer, this test breaks. During
    superficial testing the closest value to zero that evaluated correctly
    was 9.88131291682e-324. When dividing this number by 10, Python 2.7.1 evaluated
    the result to zero"""

    if n%2 == 0 or (n+1)%2 == 0:
        return True
    return False

answered Oct 31, 2011 at 14:23

Magnus Ribsskog's user avatar

1

Here’s another method:

x = 1/3  # insert your number here
print((x - int(x)) == 0)  # True if x is a whole number, False if it has decimals.

This works because int(x) essentially takes the floor of the number (ex. 3.6453 -> 3). If there’s something left over once you subtract the floor, it can’t have been a whole number.

answered Jan 25, 2017 at 1:10

Sakeeb Hossain's user avatar

x % 3 == 0 will be True if x / 3 is an integer.

answered Jun 4, 2011 at 23:22

Andrew Clark's user avatar

Andrew ClarkAndrew Clark

201k34 gold badges272 silver badges304 bronze badges

assuming you mean if a string containing digits also has a decimal point:

Python 2.6.6 (r266:84292, Apr 20 2011, 11:58:30) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> number='123.4'
>>> '.' in number
True
>>> number='123'
>>> '.' in number
False
>>>

To test if it’s integral you could mod 1:

>>> 1.0/3 % 1
0.33333333333333331
>>> 1/3 % 1
0

answered Jun 4, 2011 at 23:21

jcomeau_ictx's user avatar

jcomeau_ictxjcomeau_ictx

37.5k6 gold badges92 silver badges107 bronze badges

In Python 2, dividing an int by an int returns an int (unless python was invoked with the -Qnew option, or a from __future__ import division is at the beginning of the source; in that case / returns a float); a // specifies integer division.

In Python 3, dividing an int by an int returns a float if you use «/», or an int if you use «//».

If you want to know whether an int will divide into another int exactly, use «%» to look for a remainder.

tzot's user avatar

tzot

91.9k29 gold badges140 silver badges203 bronze badges

answered Jun 4, 2011 at 23:45

MRAB's user avatar

MRABMRAB

20.2k6 gold badges40 silver badges33 bronze badges

convert 1.0 => 1 & convert 1.x => 1.x

This code if float numbers has decimal part like 1.5 will return 1.5
& if it is 35.00 it return 35:

a = ReadFrom()    
if float(a).is_integer(): # it is an integer number like 23.00 so return 23
       return int(a)
 else: # for numbers with decimal part like : 1.5 return 1.5
       return float(a)

answered Jul 14, 2019 at 11:51

Hamed Jaliliani's user avatar

It is best to make your determination before doing the division, assuming that your x variable is an integer.

Trying to do equality tests or comparisons on floating point numbers is dangerous: http://www.lahey.com/float.htm

The answer already provided using modulus before doing the division to see if one integer is divsible by the other integer is safe. After you do a division and are dealing with possibly floating point values, then numbers are no longer exactly integers or not.

answered Jun 5, 2011 at 1:01

Ivan Novick's user avatar

Ivan NovickIvan Novick

7452 gold badges8 silver badges12 bronze badges

В этом посте мы обсудим, как проверить, является ли переменная целым числом или нет в Python.

1. Использование isinstance() функция

Стандартное решение для проверки, является ли данная переменная целым числом или нет, использует isinstance() функция. Он возвращается True если первый аргумент является экземпляром второго аргумента.

if __name__ == ‘__main__’:

    x = 10

    isInt = isinstance(x, int)

    print(isInt)            # True

Скачать  Выполнить код

 
Вы также можете использовать числовые абстрактные базовые классы вместо конкретных классов. Чтобы проверить целочисленное значение, вы можете использовать numbers.Integral Класс Python:

import numbers

if __name__ == ‘__main__’:

    x = 10

    isInt = isinstance(x, numbers.Integral)

    print(isInt)            # True

Скачать  Выполнить код

2. Использование float.is_integer() функция

Если вам нужно рассмотреть числа с плавающей запятой со всеми нулями после запятой, рассмотрите возможность использования float.is_integer() функция. Он возвращается True если экземпляр с плавающей запятой конечен с целым значением и False в противном случае.

if __name__ == ‘__main__’:

    x = 10.0

    isInt = float(x).is_integer()

    print(isInt)            # True

Скачать  Выполнить код

3. Использование int() функция

Наконец, вы можете использовать конструктор int для проверки целочисленных значений. Функция int(x) преобразует аргумент x до целого числа. Если x уже является целым числом или числом с плавающей запятой с целым значением, то выражение int(x) == x будет соответствовать действительности.

if __name__ == ‘__main__’:

    x = 10.0

    isInt = int(x) == x

    print(isInt)            # True

Скачать  Выполнить код

Это все, что касается определения того, является ли переменная целым числом или нет в Python.

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования :)

In mathematics, integers are the number that can be positive, negative, or zero but cannot be a fraction. For example, 3, 78, 123, 0, -65 are all integer values. Some floating-point values for eg. 12.00, 1.0, -21.0 also represent an integer. This article discusses various approaches to check if a number is an integer in python.

Check if a number is an integer using the type() function

In Python, we have a built-in method called type() that helps us to figure out the type of the variable used in the program. The syntax for type() function is given below.

#syntax:
type(object)​

#example
type(10)
#Output: <class 'int'>

In the following example, we declare a function check_integer to check if a number num is an integer value or not. The program checks if the type(num) is equal to the int datatype. If the condition returns True if block is executed. Otherwise, else block is executed.

def check_integer(num):
    if type(num) == int:
        print("Integer value")
    else:
        print("Not an Integer value")

check_integer(14) #Positive Integer
check_integer(-134) #Negative Integer
check_integer(0) #Zero Value
check_integer(345.87) #Decimal values

The above code returns the output as

Integer value
Integer value
Integer value
Not an Integer value

Check if a number is an integer using the isinstance() function

The isinstance() method is an inbuilt function in python that returns True if a specified object is of the specified type. Otherwise, False. The syntax for instance() function is given below.

#syntax:
isinstance(obj, type)

In the following example, we declare a function check_integer to check if a number num is an integer value or not. The program checks if the num is of int data type using the isinstance(num, int) function. If the condition is True if block is executed, Otherwise else block is executed.

def check_integer(num):
    if isinstance(num, int):
        print("Integer value")
    else:
        print("Not an Integer value")

check_integer(14) #Positive Integer
check_integer(-134) #Negative Integer
check_integer(0) #Zero value
check_integer(345.87) #Decimal value

The above code returns the output as

Integer value
Integer value
Integer value
Not an Integer value

The number such as 12.0, -134.00 are floating-point values, but also represent an integer. If these values are passed as an argument to the type() or isinstance() function, we get output as False.

if type(12.0)== int:
    print("Integer value")
else:
    print("Not an Integer value")

Output

Not an Integer value

Checking if a floating-point value is an integer using is_integer() function

In python, the is_integer() function returns True if the float instance is a finite integral value. Otherwise, the is_integer() function returns False. The syntax for is_integer() function is given below.

#syntax:
float.is_integer()

In the following example, we declare a function check_integer to check if a floating-point number f is an integer value or not. If the f.is_integer() function evaluates to True, if block is executed. Otherwise, else block is executed.

def check_integer(f):
    if f.is_integer():
        print("Integer value")
    else:
        print("Not a Integer value")

check_integer(12.00)
check_integer(134.23)

The above code returns the output as

Integer value
Not a Integer value

Checking if a floating-point value is an integer using split() + replace()

In the following example, we declare a function check_integer to check if a number num is an integer value or not. The program checks if the type(int) is equal to the integer data type. If the condition is True if block is executed.

If the condition is False, the number is a floating-point value, and hence else block is executed. In the else block, we check if the float instance is a finite integral value. Consider a number num = 12.0. The number num also represents an integer.

We convert the number num to string data type using str() function and store it in the variable str_num = ‘12.0’. The string str_num is splitted from decimal point and is assigned to the variable list_1 = [’12’, ‘0’]. The element at position 1 of list_1 gives the decimal part of the number and is stored in variable ele.

We replace every ‘0’ character in the string ele with a blank space and assign the result to variable str_1. If the length of the str_1 is 0, then the floating instance is also an integer.

def check_integer(num):
    if type(num) == int:
        print("Integer value")
    else:
        str_num = str(num)
        list_1 = str_num.split('.')
        ele = list_1[1]
        str_1 = ele.replace('0', '')
        if len(str_1) == 0:
            print("Integer value")
        else:
            print("Not an integer value")
        
check_integer(12.0)
check_integer(13.456)

The above code returns the output as

Integer value
Not an integer value

MonkeyNerd

0 / 0 / 0

Регистрация: 06.04.2017

Сообщений: 16

1

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

07.04.2017, 19:04. Показов 70179. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Условие задачи:
Необходимо написать ф-цию is_int, которая будет проверять: является ли число целым. При этом должны учитываться числа вроде 7.00000, которые также являются целыми.

Буду признателен за советы в оптимизации кода или идеи по другим способам решения.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def is_int(x):
    temp = str(x) # конвертируем в str для проверок
    
    i = 0 #счетчик
    while i < len(temp):
        if temp[i] == '.': # проверяем является ли целым / узнаем индекс нуля
          
            while i + 1 < len(temp): # пробегаемся по индексам после "."
                if temp[i + 1] != '0': # если после "." не ноль - не Int
                    return False
                i += 1
            else:
                return True
        i += 1
    else:
        return True # если "." нет - следовательно Int



0



Jabbson

Эксперт по компьютерным сетям

5889 / 3347 / 1033

Регистрация: 03.11.2009

Сообщений: 9,975

07.04.2017, 19:26

2

Python
1
2
3
4
5
6
def is_int(n):
    return int(n) == float(n)
 
print(is_int(1))    # true
print(is_int(1.0))  # true
print(is_int(1.2))  # false



1



0 / 0 / 0

Регистрация: 06.04.2017

Сообщений: 16

07.04.2017, 19:41

 [ТС]

3

Можно вкратце принцип работы?



0



Jabbson

Эксперт по компьютерным сетям

5889 / 3347 / 1033

Регистрация: 03.11.2009

Сообщений: 9,975

07.04.2017, 19:45

4

можно еще вариант, где проверка на исключения

Python
1
2
3
4
5
6
7
def is_int(n):
    try:
        return int(n) == float(n)
    except ValueError:
        return -1
 
print(is_int('a'))  # -1

принцип работы —

приходит в функцию 1.0
int(1.0) = 1
float(1.0) = 1.0
1 == 1.0

приходит 1.1
int(1.1) = 1
float(1.1) = 1.1
1 != 1.1



0



0 / 0 / 0

Регистрация: 06.04.2017

Сообщений: 16

07.04.2017, 19:49

 [ТС]

5

Очень круто. Спасибо
У меня кстати код сносный, или может есть типичные ошибки новичка?



0



mamedovvms

2923 / 844 / 324

Регистрация: 30.04.2009

Сообщений: 2,633

10.04.2017, 12:34

6

Python
1
2
def is_int(n):
 return n%1 == 0



0



Jabbson

Эксперт по компьютерным сетям

5889 / 3347 / 1033

Регистрация: 03.11.2009

Сообщений: 9,975

10.04.2017, 16:21

7

Цитата
Сообщение от mamedovvms
Посмотреть сообщение

def is_int(n):
* return n%1 == 0

Python
1
2
def is_int(n):
    return not(n%1)



0



2923 / 844 / 324

Регистрация: 30.04.2009

Сообщений: 2,633

10.04.2017, 17:35

8

Цитата
Сообщение от Jabbson
Посмотреть сообщение

not(n%1)

да можно и без скобок)))))



0



Эксперт по компьютерным сетям

5889 / 3347 / 1033

Регистрация: 03.11.2009

Сообщений: 9,975

10.04.2017, 17:46

9

Цитата
Сообщение от mamedovvms
Посмотреть сообщение

да можно и без скобок)))))

кстати, да)



0



Понравилась статья? Поделить с друзьями:
  • Как исправить все ошибки с помощью программы
  • Как найти габариты рисунка
  • Как найти угол по фото
  • Как найти rh8 в gta 5
  • Восьмерка заднего колеса велосипеда как исправить