DNA序列配对检测函数问题排查:为何未识别符合条件的片段?
问题排查与修正
你的complement5函数核心问题是循环内部的else分支直接返回False,导致程序仅检查第一个长度为5的子串后就终止,后续符合条件的子串完全没机会被验证。
比如测试用例中,sequence1 = 'CAATTCC'的第一个子串是CAATT,它的互补/反向互补序列不在sequence2中,此时函数直接返回False,根本不会检查第二个子串AATTC——而AATTC的互补序列TTAAG是存在于sequence2 = 'CTTAAGG'中的。
修正后的代码
def complement5(sequence1, sequence2): for i in range(len(sequence1) - 4): substr1 = sequence1[i:i+5] if complement(substr1) in sequence2 or reverse_complement(substr1) in sequence2: # 注意原代码里的reverese_complement拼写错误 print(f'{substr1, complement(substr1), reverse_complement(substr1)} in {sequence2}') return True # 所有子串检查完毕后才返回False return False
关键修改点
- 移除循环内的
else分支,将return False移至循环体外:只有当所有长度为5的连续子串都不满足配对条件时,才返回False。 - 修正了原代码中
reverese_complement的拼写错误(多了一个e),确保调用正确的反向互补函数。
调用修正后的complement5('CAATTCC','CTTAAGG')会正确返回True。
内容的提问来源于stack exchange,提问作者Voldemort Snape
相关产品推荐
相关产品推荐

