在我的程序中,我正在查看一个字符串,并希望知道它是否表示为一个32位整数。
当前,我首先使用
如何最好地检查我的输入字符串是否包含有效的32位整数?
当前,我首先使用
isdigit()
检查它是否是数字,然后检查它是否超过了2^32的值(假设我不关心无符号值)。如何最好地检查我的输入字符串是否包含有效的32位整数?
在这里找到答案:https://docs.python.org/2/library/stdtypes.html#int.bit_length
我认为这是最简单和最有效的解决方案。
>>> your_num = 2147483651
>>> your_num.bit_length()
32
另一个想法是,看看这个值是否可以以4字节的方式打包:
>>> from struct import pack, error
>>> def test_32bit(n):
... try:
... pack("i", n)
... except error:
... return False
... return True
...
pack("I", n)
。0x7FFFFFFF
。 - daindef check_32_bit(n):
return n<1<<31
n<2**31
。 - user1717828对于无符号值,这将起作用:
>>> 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
try
和二进制,您可以验证 n 是否为有效数字。顺便检查一下位数是否少于 32 位。这样就可以全天候地工作了... - dawgis32(2**31)
中出现问题,因为该字符串包含“**”。这只是更多的步骤。根据上下文使用适当的方法。 - dawg>>> def is_int32(number):
... try:
... return not(int(number)>>32)
... except ValueError:
... return False
if abs(number) < 2**31 and number != 2**31 - 1:
return True
else:
return False
[-2^31, 2^31 - 1]
范围内,我们就可以继续进行。>>> def is_32_bit(n: int) -> bool:
... if n in range(-2 ** 31, (2**31) - 1):
... return True
... return False
...
>>> is_32_bit(9999999999)
False
>>> is_32_bit(1)
True
2**32
应该是 (2**31)-1
。 - Wai Ha Lee