找不到所有的回文

时间:2017-04-25 14:36:42

标签: python python-3.x palindrome

我试图编写一个程序,使用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)

1 个答案:

答案 0 :(得分:0)

我认为这是一个简单的标签错误。在倒数第二行,你写了

all_palindromes = allPalindromes(DNA)

这应该是

all_palindromes = allPalindromes(strand)

DNA是函数范围内的局部参数,因此当您退出函数时,它未定义。相反,strand是您输入的对象,因此应该传递给函数。