如何检查变量是否为整数?


当前回答

使用int函数提供帮助

intchecker = float(input('Please enter a integer: '))
intcheck = 0
while intcheck != 1:
    if intchecker - int(intchecker) > 0:
        intchecker = float(input("You didn't enter a integer. "
                                 "Please enter a integer: "))
    else:
        intcheck = 1
print('you have entered a integer')

其他回答

#######################################
# Value_Is_Int
#######################################
def value_is_int(value):
    try:
        tempVal = int(value)
        return True
    except:
        return False

调用这个函数:

if value_is_int(value):
    print "Integer"
else:
    print "Not integer"

为什么不直接检查您想检查的值是否等于它本身转换为一个整数,如下所示?

def isInt(val):
    return val == int(val)
#!/usr/bin/env python

import re

def is_int(x):

    if(isinstance(x,(int,long))):

        return True
    matchObj = re.match(r'^-?\d+\.(\d+)',str(x))

        if matchObj:

        x = matchObj.group(1)

        if int(x)-0==0:

            return True

     return False

print is_int(6)

print is_int(1.0)

print is_int(1.1)

print is_int(0.1)

print is_int(-956.0)

在这里找到了一个关于SO本身的相关问题。

Python开发人员倾向于不检查类型,而是执行特定于类型的操作并捕获TypeError异常。但如果你不知道类型,那么你有以下。

>>> i = 12345
>>> type(i)
<type 'int'>
>>> type(i) is int
True

如果你要这么做,那就这么做

isinstance(<var>, int)

除非你用的是python2。X是你想要的

isinstance(<var>, (int, long))

不要使用type。在Python中,这几乎从来都不是正确的答案,因为它阻碍了多态性的所有灵活性。例如,如果你继承int类型,你的新类应该注册为int类型,这种类型是不行的:

class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True

这遵循了Python的强多态性:您应该允许任何行为类似int型的对象,而不是强制它是int型。

BUT

然而,经典的Python心态是请求原谅比请求许可更容易。换句话说,不要检查x是否是整数;假设它是,如果不是,则捕获异常结果:

try:
    x += 1
except TypeError:
    ...

这种心态正慢慢被抽象基类的使用所取代,抽象基类允许您准确地注册对象应该具有的属性(添加哪些属性?乘?加倍?)通过使它继承一个特殊构造的类。这将是最好的解决方案,因为它将允许那些具有必要和足够属性的对象,但你必须阅读如何使用它的文档。