【问题标题】:IndexError: string index out of range?IndexError:字符串索引超出范围?
【发布时间】:2016-09-11 14:59:46
【问题描述】:

我在以下代码中不断收到IndexError: string index out of range 异常,但我不知道为什么。

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

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

在称为转录的令人难以置信的分子壮举中,您的细胞会产生信使 RNA 分子,这些分子反映您 DNA 中核苷酸的序列。然后使用 RNA 来制造完成细胞工作的蛋白质。编写一个递归函数transcribe( S ),它应该将字符串S 作为输入,该字符串将包含DNA 核苷酸(大写字母As、Cs、Gs 和Ts)。可能还有其他字符,尽管它们会被您的转录功能忽略——这些可能是空格或其他不是真正的 DNA 核苷酸的字符。

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

输入中的 As 成为输出中的 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')

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

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

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

    if not S:
        return ''
    

    您应该完全删除tran 字符串;那是 always 一个空字符串。 '' * <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:])
    

    【讨论】:

    • 成功了!我不知道我是怎么错过的。非常感谢!!
    【解决方案2】:

    这里有一些更接近你原来的东西:

    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')
    

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2012-02-01
      相关资源
      最近更新 更多