如何检查变量是否为整数?
当前回答
当这样一个基本的,有效的,我认为是平凡的问题被提出时,看到如此激烈的讨论真是令人震惊。
有些人指出,针对int(和long)的类型检查可能会在遇到大十进制数的情况下出错。完全正确。
有些人指出,你应该“只做x + 1,看看是否会失败”。好吧,一方面,这也适用于浮点数,另一方面,很容易构造一个肯定不是很数字的类,但以某种方式定义了+运算符。
我不同意许多大力宣称你不应该检查类型的帖子。好吧,GvR曾经说过这样的话,在纯理论中,这可能是对的,但在实践中,isinstance通常是有用的(那是一段时间前,没有链接;你可以在类似这篇文章中阅读GvR对相关问题的看法)。
有趣的是,很多人似乎认为OP的意图是检查给定x的类型是否为数值整数类型——我所理解的是我通常在使用OP的话时的意思:x是否代表整数。这是非常重要的:比如问别人他们想选多少个项目,你可能想检查你得到的是一个非负整数。这样的用例比比皆是。
在我看来,重要的是要看到(1)类型检查只是程序正确性的一种度量,而且通常是相当粗略的,因为(2)通常是有边界的值有意义,而越界的值毫无意义。有时,只有一些间歇值是有意义的——比如考虑所有的数字,在给定的情况下,只有那些实数(非复数)、整数是可能的。
有趣的是,似乎没有人提到检查x == math。楼层(x)。如果这应该给出一些大的十进制类的错误,那么也许是时候重新思考OOP范式了。还有PEP 357考虑了如何使用不那么明显是整数但肯定是整数的值作为列表索引。我不确定我是否喜欢这个解决方案。
其他回答
到目前为止,所有提出的答案似乎都忽略了一个事实,即双精度浮点数(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
一个简单的方法是直接检查除以1的余数是否为0。
if this_variable % 1 == 0:
list.append(this_variable)
else:
print 'Not an Integer!'
在这里找到了一个关于SO本身的相关问题。
Python开发人员倾向于不检查类型,而是执行特定于类型的操作并捕获TypeError异常。但如果你不知道类型,那么你有以下。
>>> i = 12345
>>> type(i)
<type 'int'>
>>> type(i) is int
True
一种更通用的方法将尝试检查整数和作为字符串给出的整数
def isInt(anyNumberOrString):
try:
int(anyNumberOrString) #to check float and int use "float(anyNumberOrString)"
return True
except ValueError :
return False
isInt("A") #False
isInt("5") #True
isInt(8) #True
isInt("5.88") #False *see comment above on how to make this 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!")
为了判断该数字是否是整数,我将从用户输入的平方根得到的浮点数转换为一个四舍五入的整数(存储为值),如果这两个数字相等,那么第一个数字必须是整数,允许程序响应。这可能不是最短的方法,但对我来说很有效。
推荐文章
- 从URL中获取参数
- 在python中插入一个列表到另一个列表的语法是什么?
- Python中的最大浮点数是多少?
- Java整数到字节数组
- 将一个列表分成大约相等长度的N个部分
- Python __str__与__unicode__
- 在python中,del和delattr哪个更好?
- 如何动态加载Python类
- 有没有办法在python中做HTTP PUT
- “foo Is None”和“foo == None”之间有什么区别吗?
- 类没有对象成员
- Django模型“没有显式声明app_label”
- 熊猫能自动从CSV文件中读取日期吗?
- 在python中zip的逆函数是什么?
- 有效的方法应用多个过滤器的熊猫数据框架或系列