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


当前回答

为什么不试试这样的方法呢:

if x%1 == 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:
    ...

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

如果您正在从一个文件中读取数据,并且您有一个具有多种数据类型值的数组或字典,那么以下内容将很有用。 只需检查变量是否可以类型转换为int(或您想强制执行的任何其他数据类型)。

try :
    int(a);
    #Variable a is int
except ValueError : 
    # Variable a is not an int

我在所有软件中使用的一个简单方法是这样的。它检查变量是否由数字组成。

test = input("Enter some text here: ")
if test.isdigit() == True:
   print("This is a number.")
else:
   print("This is not a number.")

到目前为止,所有提出的答案似乎都忽略了一个事实,即双精度浮点数(python中的浮点数实际上是双精度浮点数)也可以是整数(如果小数点后没有任何数字)。我使用内置的is_integer()方法对double进行检查。

示例(在for循环中每x次执行一次操作):

for index in range(y): 
    # do something
    if (index/x.).is_integer():
        # do something special

编辑:

在调用此方法之前,始终可以将其转换为浮点数。有三种可能性:

>>> float(5).is_integer()
True
>>> float(5.1).is_integer()
False
>>> float(5.0).is_integer()
True

否则,你可以先检查它是否像Agostino说的那样是int型:

def is_int(val):
    if type(val) == int:
        return True
    else:
        if val.is_integer():
            return True
        else:
            return False