为了账号安全,请及时绑定邮箱和手机立即绑定

Python:运行长度编码

Python:运行长度编码

阿晨1998 2021-11-16 14:25:59
如果输入只包含一个没有附加数字的字符,我会收到一个错误。例如,如果用户要输入“a2bc”,则输出应为“aabc”。我必须满足游程格式。如果是“a2b1c1”,则解码功能有效。单个字符无法识别其中任何一个。我玩过条件和调试器。我似乎无法满足运行长度的格式。下面显示的代码是我的尝试。我评论了我试图解决我的问题的块。def decode(user_input):    if not user_input:        return ""    else:        char = user_input[0]        num = user_input[1]        if num.isdigit():            result = char * int(num)        # elif num.isalpha():        #     # this should skip to the next two characters        else:            result = char * int(num)        return result + decode(user_input[2:])test1 = decode("a2b3c1") test2 = decode("a2b3c")print(test1)print(test2)(注意:test2 的输出应该是"aabbbc")非常感谢。
查看完整描述

2 回答

?
MM们

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:])


查看完整回答
反对 回复 2021-11-16
?
SMILET

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:])

请注意,由于最大递归限制,递归执行此操作将限制您可以处理的输入字符串的大小。


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信