IndexError:字符串索引超出范围?

时间:2016-09-11 14:59:46

标签: python python-2.7

我一直在以下代码上获得IndexError: string index out of range例外,我无法弄清楚原因。

我应该以递归方式解决以下问题。

  

最后,写下transcribe( S )。这是它的描述:

     

在一项名为转录的令人难以置信的分子专长中,您的细胞会产生信使RNA分子,这些分子反映了DNA中的核苷酸序列。然后将RNA用于产生进行细胞工作的蛋白质。写一个递归函数transcribe( S ),它应该将字符串S作为输入,它将具有DNA核苷酸(大写字母As,Cs,Gs和Ts)。也可能有其他字符,但转录功能会忽略它们 - 这些字符可能是空格或其他不是DNA核苷酸的字符。

     

然后,转录应该返回将从该字符串S生成的信使RNA作为输出。正确的输出只使用替换:

     

在输入中输入成为Us   输入中的Cs在输出中变为Gs   输入中的Gs在输出中变为Cs   输入中的Ts变为输出中的As   任何其他输入字符应完全从输出中消失

def transcribe( S ):
  tran = '' * len(S)
  if S[0] == 'A':
    tran = tran + 'U' + transcribe( S[1:] )
    return tran
  elif S[0] == 'C':
    tran = tran + 'G' + transcribe( S[1:] )
    return tran
  elif S[0] == 'G':
    tran = tran + 'C' + transcribe( S[1:] )
    return tran
  elif S[0] == 'T':
    tran = tran + 'A' + transcribe( S[1:] )
    return tran
  else:
    return ""

print transcribe('GATTACA')

2 个答案:

答案 0 :(得分:3)

尝试将[0]索引到空字符串中会引发IndexError

您需要测试字符串是否为空首先,因为最终S[1:]会将空刺激传递到transcribe()

if not S:
    return ''

你应该完全放弃tran字符串;那个总是一个空字符串。 '' * <any number>仍为''

不是在单独的if语句中测试每个可能的字母,而是使用字典将一个字符映射到另一个字符:

mapping = {'A': 'U', 'C': 'G', 'G': 'C', 'T': 'A'}
def transcribe(S):
    if not S:
        return ''
    replacement = mapping.get(S[0], '')  # default is empty
    return replacement + transcribe(S[1:])

答案 1 :(得分:0)

这里的内容更接近原作:

def transcribe( S ):
    if S == '':
        return ''
    elif S[0] == 'A':
        return 'U' + transcribe( S[1:] )
    elif S[0] == 'C':
        return 'G' + transcribe( S[1:] )
    elif S[0] == 'G':
        return 'C' + transcribe( S[1:] )
    elif S[0] == 'T':
        return 'A' + transcribe( S[1:] )
    else:
        return transcribe( S[1:] )

print transcribe('GATTACA')