2 回答

TA贡献1886条经验 获得超2个赞
这需要两个更改:正如您已经发现的,如果num实际上不是数字,那么您只使用一次字符并跳过一个字符。否则,您使用数字并跳过前面的两个字符。但是您还需要处理字符串末尾没有数字的单个字符。您不仅可以通过检查是否user_input为空,还可以通过检查它是否只有一个字符来解决这个问题——在这两种情况下,您都可以简单地返回字符串。
def decode(user_input):
if len(user_input) < 2:
return user_input
char = user_input[0]
num = user_input[1]
if num.isdigit():
return char * int(num) + decode(user_input[2:])
else:
return char + decode(user_input[1:])

TA贡献1796条经验 获得超4个赞
当下一个字符不是数字(即 1 是隐式的)时,您应该前进 1 而不是 2:
def decode(user_input):
if len(user_input) < 2 : return user_input
multiplier,skip = (int(user_input[1]),2) if user_input[1].isdigit() else (1,1)
return user_input[0] * multiplier + decode(user_input[skip:])
请注意,由于最大递归限制,递归执行此操作将限制您可以处理的输入字符串的大小。
添加回答
举报