使用 for while 循环拼接 mRNA

Splicing mRNA using for a while loops

我正在 Python 3 中进行编码 class,我需要帮助找出我的代码有什么问题。基本上我所做的是获取 mRNA 序列并剪接序列中的外显子。我给函数一个序列和外显子的位置,然后它必须将它们拼接出来,return mRNA 的字符串。作业的重点是我们不应该使用列表理解、拆分或连接方法。这是我目前所拥有的:

def splice(seq, exons):
    newseq = ""
    i = 0
    for x in exons:
        while i < len(seq):
            if i == x[0]:
                i += (x[1] - x[0])
            else:
                newseq += seq[i]
                i = i + 1
    return newseq

就像现在一样,我的代码 return 的 mRNA 序列只有第一个外显子被剪掉,而外显子位置列表中的任何其他外显子都没有。像这样:

>> splice("AAACCCTTTTGGGTTTAA", [(3,6), (10,16)])
'AAATTTTGGGTTTAA'

它应该 return 这个(对于我给出的例子):'AAATTTTAA'

有人对如何使这项工作有任何建议吗?谢谢! (提醒一下,除了Java中的一点点,我在这学期之前从未编码过,所以请不要对我太挑剔。)

试试这个:

def splice(seq, exons):
    newseq = ""
    next = 0
    for x, y in exons:
        newseq += seq[next:x]
        next = y
    newseq += seq[next:]        
    return newseq

和测试:

>>> splice("AAACCCTTTTGGGTTTAA", [(3,6), (10,16)])
'AAATTTTAA'

我不知道你是否需要一个while循环。这是一个仅使用 for 循环的版本:

def splice(seq, exons):
    newseq = ""
    i = 0
    n = 0
    for x in exons:
        newseq = seq[i:x[0]-n]+seq[x[1]-n:]
        seq = newseq
        n = x[1]-x[0]
        i = x[0] - n
    return newseq

splice("AAACCCTTTTGGGTTTAA", [(3,6), (10,16)])