Чтобы проверить является ли строка введённая пользователем целым числом, можно воспользоваться 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
1951 gold badge3 silver badges16 bronze badges
asked Jun 4, 2011 at 23:17
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 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
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
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
x % 3 == 0
will be True
if x / 3
is an integer.
answered Jun 4, 2011 at 23:22
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_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
91.9k29 gold badges140 silver badges203 bronze badges
answered Jun 4, 2011 at 23:45
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
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 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 Метки нет (Все метки)
Условие задачи: Буду признателен за советы в оптимизации кода или идеи по другим способам решения.
0 |
Jabbson 5889 / 3347 / 1033 Регистрация: 03.11.2009 Сообщений: 9,975 |
||||
07.04.2017, 19:26 |
2 |
|||
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 |
|||
можно еще вариант, где проверка на исключения
принцип работы — приходит в функцию 1.0 приходит 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 |
|||
0 |
Jabbson 5889 / 3347 / 1033 Регистрация: 03.11.2009 Сообщений: 9,975 |
||||
10.04.2017, 16:21 |
7 |
|||
def is_int(n):
0 |
2923 / 844 / 324 Регистрация: 30.04.2009 Сообщений: 2,633 |
|
10.04.2017, 17:35 |
8 |
not(n%1) да можно и без скобок)))))
0 |
5889 / 3347 / 1033 Регистрация: 03.11.2009 Сообщений: 9,975 |
|
10.04.2017, 17:46 |
9 |
да можно и без скобок))))) кстати, да)
0 |