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


当前回答

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

def isInt(val):
    return val == int(val)

其他回答

从来没有。检查。类型。

这样做。总是这样。

try:
    some operation that "requires" an integer
except TypeError, e:
    it wasn't an integer, fail.

在numpy检查的存在,如..

isinstance(var, numbers.Integral)

. .(慢)或..

isinstance(var, (int, long, np.integer))

. .为了匹配所有类型变量,比如np.int8, np.int8。uint16,……

(PY3中Drop long)

从任何地方识别任何整数类对象都是一场棘手的猜谜游戏。检查

var & 0 == 0 

因为真理和非例外可能是一个很好的赌注。类似地,专门检查有符号整数类型:

var ^ -1 ==  -var - 1

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

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:
    ...

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

val=3
>>> isinstance(val,int ) 
True

将工作。

我正在写一个程序来检查一个数字是否是平方的,我遇到了这个问题 我使用的代码是:

import math
print ("this program will tell you if a number is square")
print ("enter an integer")
num = float(input())
if num > 0:
    print ("ok!")
    num = (math.sqrt(num))
    inter = int(num)
    if num == inter:
            print ("It's a square number, and its root is")
            print (num)
    else:
            print ("It's not a square number, but its root is")
            print (num)
else:
    print ("That's not a positive number!")

为了判断该数字是否是整数,我将从用户输入的平方根得到的浮点数转换为一个四舍五入的整数(存储为值),如果这两个数字相等,那么第一个数字必须是整数,允许程序响应。这可能不是最短的方法,但对我来说很有效。