Python程序问题

Python程序问题,python,Python,所以我已经在这段python代码上工作了几天了。我正在试着解码我以前做的零一码。简单地说,它隐藏了基因组密码 binary = raw_input ('Enter binary code:') binary = binary.replace('00', 'A') binary = binary.replace('01', 'C') binary = binary.replace('10', 'G') binary = binary.replace('11', 'T') print binar

所以我已经在这段python代码上工作了几天了。我正在试着解码我以前做的零一码。简单地说,它隐藏了基因组密码

binary = raw_input ('Enter binary code:')

binary = binary.replace('00', 'A')
binary = binary.replace('01', 'C')
binary = binary.replace('10', 'G')
binary = binary.replace('11', 'T')

print binary

我的问题是,它将接受类似0110=CG的内容。但当我在后面添加任何字符时,它就会出错,比如011011应该是CGT,而不是C1CC1。如果有人能发现这个问题,甚至解决它,那就太好了。

在下面的代码中,为了清楚起见,错误检查被省略了

a='011011'
rep={'00': 'A','01': 'C','10':'G','11': 'T'}
res=''

for x in xrange(0,len(a),2):
    res+=rep[a[x]+a[x+1]]

print res

在这里,您只需将字符串拆分为一些长度为2的块,然后将每个块用作字典的键

反复去掉两个字符并解码

s = "100101001010101010110"

decode = {'00':'A', '01':'C', '10':'G', '11':'T'}

while s:
    (code, s) = (s[:2], s[2:])
    print decode[code]

ForceBru的替代解决方案,使用
re
模块:

import re    
dna = '100010101001010111000'

base_pairs = {'00': 'A', '01': 'C', '10':'G', '11': 'T'}

alpha_dna = ''.join([base_pairs[x] for x in re.findall('..?', dna)])

# alpha_dna == 'GAGGGCCCTA'

一艘客轮!可能没有用,但只是为了好玩:

"".join([ {'00':'A', '01':'C', '10':'G', '11':'T'}[code] for code in [ binary[i:i+2] for i in range(0,len(binary),2) ]])

是的,我沉迷于列表理解。

您必须将字符串拆分为两个字符串,然后映射到ACGT。我假定您没有根据需要一次读取两个字符。
011011
-首先,您的脚本检查“a”-没有。然后我们检查“C”-我看到2个匹配,您的
二进制
变成
'C1C1'
。现在检查“G”和“T”,没有匹配项。您的脚本没有任何东西可以告诉它只查看2个字符的组。您不能像这样对整个字符串使用
replace()
,因为没有任何东西可以确保替换将遵循所需的两个字符单位。相反,一次使用两个字符的字符串,并转换这两个字符的单位。您是否意识到在生成索引(4字节/索引)以索引到元素小1字节的数组中时浪费了大量cpu周期?然后对数组进行两次索引,以提取单个字符?@haavee这些是字符串,因此它们不是一个字节小。调用sys.getsizeof()可以看到它们比that@haavee,编写此代码是为了显示算法,尽可能简单易读。我的目标不是非常有效的代码,我的目标是易于理解的代码