Python:检查变量是二进制的

时间:2014-01-12 16:37:45

标签: python variables if-statement binary

我如何制作if / else语句,if if检查变量8位变量是否为二进制? 我知道如何做8位数部分(len()),但我无法弄清楚如何将其限制为1和0。

6 个答案:

答案 0 :(得分:2)

要确认字符串恰好包含8个1和0,请测试它是否为正则表达式

^[01]{8}$

使用示例:

import re
isBin = re.compile('^[01]{8}$')
s1 = "00110101"

if(s1.match(isBin)):
  print "it is a match"
else:
  print "it is not a match"

答案 1 :(得分:1)

您可以使用generator expressionall *:

if len(var) == 8 and all(x in "01" for x in var):
    ...

以下是演示:

>>> var = "01010101"
>>> len(var) == 8 and all(x in "01" for x in var)
True
>>> var = "0101010"
>>> len(var) == 8 and all(x in "01" for x in var)
False
>>> var = "01010102"
>>> len(var) == 8 and all(x in "01" for x in var)
False
>>>

*注意:上面的代码假定var是一个字符串。

答案 2 :(得分:0)

变量是编码为字符串还是整数数组?你可以只做一个列表理解来检查每个元素,其他解决方案也是可能的。

isBinary=[x==1 or x==2 for x in variable]
isBinary=False in isBinary

答案 3 :(得分:0)

您可以尝试使用int解析它们,同时传递这样的基数:

>>> x = int("10010", 2)
>>> print x
18

答案 4 :(得分:0)

您可以使用all() function来测试每个角色:

len(var) == 8 and all(c in '01' for c in var)

或使用set

binary_digits = set('01')
len(var) == 8 and binary_digits.issuperset(var)

或使用regular expression

import re

binary_digits = re.compile('^[01]{8}$')
binary_digits.match(, var) is not None

在这三个选项中,正则表达式选项最快,然后使用集合:

>>> import re
>>> import timeit
>>> def use_all(v): return len(v) == 8 and all(c in '01' for c in v)
... 
>>> def use_set(v, b=set('01')): return len(v) == 8 and b.issuperset(v)
... 
>>> def use_re(v, b=re.compile('^[01]{8}$')): return b.match(v) is not None
... 
>>> binary, nonbinary = '01010101', '01010108'
>>> timeit.timeit('f(binary); f(nonbinary)', 'from __main__ import binary, nonbinary, use_all as f')
4.871071815490723
>>> timeit.timeit('f(binary); f(nonbinary)', 'from __main__ import binary, nonbinary, use_set as f')
2.558954954147339
>>> timeit.timeit('f(binary); f(nonbinary)', 'from __main__ import binary, nonbinary, use_re as f')
2.036846160888672

答案 5 :(得分:0)

我将假设您还希望在某个时刻将字符串转换为整数。如果不是这样,请纠正我。

在Python中,通常认为尝试做某事更好,如果发生则处理失败;而不是检查是否有可能,只有这样做。这被称为EAFP原则(要求宽恕比允许更容易)。

在这种情况下,您应该使用try except

s = '01100011'
if len(s) == 8:
    try:
        n = int(s, 2)
    except ValueError:
        handle_exception_here()