2014-09-25 91 views
-2

我有這樣dict = { A:3, B:5, C:3, D:2, E:6, F:5}生成基於字典的值的二進制串在python

字典我想編寫,其基於該值作爲二進制比特寬度級聯二進制流的功能。

如果寬度爲7: - 二進制0101010上LSB位置

假設如果函數是func(B, D, E)從0開始7位:我的輸出應該產生的級聯二進制流

0101010101010 

因爲:

{01010 (B) + 10 (D) + 101010 (E)} 

每個值的lsb位必須始終爲零。預計產量0101010101010

這裏是我的嘗試:

def Generate_binary_stream(width): 
output_stream = "" 
bit = 0 
for i in range (0,width): 
    output_stream += str(bit) 
    bit = ~bit 

print ("The bitstream for width %d is %s"%(width,output_stream)) 

輸出我得到:0-10-10-10-10(如何消除連字符?)

+2

'01010''B'的二進制表示怎麼樣? – 2014-09-25 18:49:43

+0

由於B的寬度是5,從LSB上的0開始,它的值將是0和1的高達5位數字-01010 – user3769674 2014-09-25 18:54:03

+1

提示:編寫一個函數'get_binary_stream(size)',返回所需大小的單個字符串。然後用它來獲得連接的二元蒸汽。 – Kevin 2014-09-25 18:54:56

回答

0

可以轉換與bin功能二進制:

my_list=[] 
    >>> def conv(*args): 
    ... for i in args: 
    ... my_list.append(bin(dict[i])) 
     print ''.join(map(str,my_list)) 

    >>> conv('A','B','C') 
    0b110b1010b110b110b1010b11 
+0

我不希望密鑰的二進制等效值。它只是替代0和1的寬度 – user3769674 2014-09-25 18:55:56

+0

你的輸出如何匹配預期? – 2014-09-25 18:57:41

+0

對不起,我不明白'備用0和1的寬度'! – Kasramvd 2014-09-25 18:59:07

0

不知道我是否理解正確,但這似乎產生了預期的結果:

width = { 'A':3, 'B':5, 'C':3, 'D':2, 'E':6, 'F':5} 

def bits(width): 
    return ('0' if width % 2 else '') + '10' * (width // 2) 

def to_bits(s): 
    return ''.join(bits(width[x]) for x in s) 

print to_bits('BDE') # 0101010101010 
相關問題