如何实现整数转ACGT DNA序列并修复bintostring空返回问题
问题分析
- 多余的dna2遍历逻辑:不需要循环遍历所有碱基映射条目,拿到每一位的数值后直接通过
dna2[位数值]即可查询到对应碱基 - 未保留数值计算余数:计算完高权重位的数值后,没有减去已计算的部分保留余数,会导致低权重位的计算结果完全错误
- 冗余的check逻辑无实际作用,反而会额外插入错误的'A'字符
修复后完整代码
dna = {'A':0, 'C':1, 'G':2, 'T':3} dna2 = {0:'A', 1:'C', 2:'G', 3:'T'} def bintostring(num_list): seq = [] # 4位碱基对应的4的幂次权重,从高到低 weights = [64, 16, 4, 1] for n in num_list: current_val = n for w in weights: # 计算当前权重对应的碱基数值 digit = current_val // w seq.append(dna2[digit]) # 保留余数用于后续低位计算 current_val = current_val % w return "".join(seq) # 测试用例1 print(bintostring([3])) # 预期输出:AAAT def stringtobin(seq): power_of_4 = 1 num = 0 if len(seq)!=4: return None i = len(seq)-1 while i>=0: power_of_4*=4 Digitval = dna[seq[i]] num+=Digitval*power_of_4//4 i-=1 return num # 测试用例2 print(stringtobin("AAAT")) # 预期输出:3 # 互转验证 print(stringtobin("CCCC")) # 输出:85 print(bintostring([85])) # 输出:CCCC
验证结果
修复后的函数完全符合预期:
- 输入
[3]返回AAAT - 输入
[85]返回CCCC - 与原有的
stringtobin互为逆函数,转换结果完全匹配
内容的提问来源于stack exchange,提问作者nickg
相关产品推荐
相关产品推荐

