如何使用Python检查数字是否为32位整数?
在我的程序中,我看到一个字符串,我想知道它是否代表一个32位整数 目前,我首先使用如何使用Python检查数字是否为32位整数?,python,int,Python,Int,在我的程序中,我看到一个字符串,我想知道它是否代表一个32位整数 目前,我首先使用isdigit()检查它是否是一个数字,然后检查它是否超过2^32的值(假设我不关心无符号值) 检查输入字符串是否包含有效的32位整数的最佳方法是什么?对于无符号值,这将起作用: >>> def is32(n): ... try: ... bitstring=bin(n) ... except (TypeError, ValueError): ...
isdigit()
检查它是否是一个数字,然后检查它是否超过2^32的值(假设我不关心无符号值)
检查输入字符串是否包含有效的32位整数的最佳方法是什么?对于无符号值,这将起作用:
>>> def is32(n):
... try:
... bitstring=bin(n)
... except (TypeError, ValueError):
... return False
...
... if len(bin(n)[2:]) <=32:
... return True
... else:
... return False
...
>>> is32(2**32)
False
>>> is32(2**32-1)
True
>>> is32('abc')
False
def为32(n):
... 尝试:
... 位字符串=bin(n)
... 除了(TypeError、ValueError):
... 返回错误
...
... 如果len(bin(n)[2:])>>is32(2**32)
假的
>>>is32(2**32-1)
真的
>>>is32(‘abc’)
假的
另一个想法,看看该值是否可以压缩为4字节:
>>> from struct import pack, error
>>> def test_32bit(n):
... try:
... pack("i", n)
... except error:
... return False
... return True
...
如果使用无符号值,
pack(“I”,n)
。假设最大的32位整数为
然后,我们需要检查我们的数字是否大于此值:
abs(n) <= 0xffffffff
abs(n)简单的解决方案如下
if abs(number) < 2**31 and number != 2**31 - 1:
return True
else:
return False
如果abs(编号)<2**31和编号!=2**31 - 1:
返回真值
其他:
返回错误
如果我们的号码在[−2^31, 2^31 − 1]
range我们很乐意去lol…是的,确实如此…但是这是一种有效的方法还是有更好的方法呢?你能发布你的确切代码吗,所以我们可以看到实现?我可能会使用位运算符。为什么我不能检查它是否在上下边界值的范围内?通过对bin使用try
,您可以验证n是一个有效的数字。当您进行此操作时,只需检查位的长度是否小于32位。整天都在工作…这很酷…但是isDigit不是已经在检查它是否是一个有效的数字了吗?我正在使用str.isDigit()方法作为预筛选来检查它是否是一个数字表示形式,然后将它输入到它的整数表示形式中,并根据它的边界进行检查@user1020069:这可能也行。按照我所写的方式,Python正在为您计算。如果您正在检查一个字符串,它将被有效的is32(2**31)
阻塞,因为该字符串包含“**”,这只是更多的步骤。使用适合上下文的内容。不要使用裸露的except子句,因为它可以捕获不应该在此处捕获的内容,例如键盘中断。@AbeKarplus我知道,但我只是懒惰:)这不适用于负数:>>>is_int32(-1):false正数和负数限制不一样,-2^31和2^31-1有符号整数的十六进制值应为0x7fffff
if abs(number) < 2**31 and number != 2**31 - 1:
return True
else:
return False