我做了一个递归函数,它接受二进制代码,并且应该转换为字母“A”,“T”,“C”和“G”。
然后在这里,它应该将该二进制代码分配给下面相应的字母,但它不会超过第一个字母。你们中的任何人可以帮我解决这个问题吗?
def numeros(i,f):
e="100101"
if i >=len(e):
print f
else:
if e[i:i+1]=="1":
f=f+"G"
print f
numeros(i+1,f)
elif e[i:i+3]=="011":
f=f+"T"
print f
numeros( i+3,f)
elif e[i:i+3]=="010":
f=f+"A"
print f
numeros( i+3,f)
elif e[i:i+3]=="00":
f=f+"C"
print f
numeros( i+3,f)
numeros(0,"")
答案 0 :(得分:1)
没有深入研究这种方法的优点,只是简单地看一下问题(没有递归),我建议现在是开始研究调试技术和工具的好时机。可能值得查看the python debugger,或者只是添加一些打印语句,以便了解代码中发生了什么。
至少当你有一个if/elif
链时,在底部有一个else
总是一个好主意,即使你从未期望代码到达那里,也是打印出一条消息或引发异常,表明发生了意外事件。如果您这样做,您会发现elif
中的错误导致代码无法进入任何递归调用,您需要仔细检查条件测试
答案 1 :(得分:0)
递归不适合这个问题,并且会在超过1000个令牌长度的任何输入字符串上崩溃(== Python的调用堆栈的默认深度)。
我建议改为:
CODES = {
"1" : "G",
"00" : "C",
"010": "A",
"011": "T"
}
def decode(string):
token = ""
message = []
for digit in string:
token += digit
if token in CODES:
message.append(CODES[token])
token = ""
return "".join(message)
给出了
>>> print(decode("100101"))
GCG