我一直在以下代码上获得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')
答案 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')