2014-01-12 23 views
0

我將如何做if/else語句,其中if檢查變量8位變量是否是二進制的? 我知道如何做8位數字部分(len()),但我不能解決如何將它限制爲1和0。Python:檢查一個變量是二進制的

+1

你的意思是一個_String_變量只包含一和零,對吧?因爲「內部表示」作爲1和0是給定的... – Floris

回答

0

是編碼爲字符串還是整數數組的變量?你可以做一個列表理解來檢查每個元素,其他解決方案也是可能的。

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

你可以試着和int解析它們同時傳遞一個基數是這樣的:

>>> x = int("10010", 2) 
>>> print x 
18 
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

您可以使用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是一個字符串。

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 

這三個選擇中,正則表達式選項是最快的,接下來是使用set:

>>> 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 
0

我打算假設你也想在某個時刻將字符串轉換爲整數。如果情況並非如此,請糾正我。

在Python中,通常認爲嘗試做某件事情會更好,如果發生則處理失敗;而不是檢查是否有可能,只有這樣做。這就是所謂的EAFP原則(它比容許更容易要求寬恕)。

在這種情況下,你應該使用tryexcept

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