我试图编写一个程序,使用Python 3.6查找DNA序列中的所有回文。我已经有了一个工作函数来检查DNA序列是否是回文序列(与回文词有点不同),但我似乎无法获得应该将所有回文序列从DNA序列返回到工作。现在,它只返回一个列表,当DNA序列总是回文时,而不是DNA序列中的回文。
以防万一:检查序列是否为回文序列的函数(工作正常):
def checkPalindrome(DNA):
converter = DNA.maketrans("ATGC", "TACG") # finds the complementary strand
complementary_strand = DNA.translate(converter)
# reverses the complementary strand
palindrome_check = complementary_strand[::-1]
if strand == palindrome_check:
return True
else:
return False
应该找到所有回文的功能+执行代码(不起作用):
def allPalindromes(DNA):
left,right = 0,len(DNA)
j = right
palindromes = []
while left < right - 1:
temp = DNA[left:j]
j -= 1
if checkPalindrome(temp):
palindromes.append(temp)
if j < left+2:
left += 1
j = right
return list(set(palindromes))
strand = getInput()
all_palindromes = allPalindromes(strand)
print(all_palindromes)
答案 0 :(得分:0)
我认为这是一个简单的标签错误。在倒数第二行,你写了
all_palindromes = allPalindromes(DNA)
这应该是
all_palindromes = allPalindromes(strand)
DNA是函数范围内的局部参数,因此当您退出函数时,它未定义。相反,strand是您输入的对象,因此应该传递给函数。