繁体   English   中英

Python:行程编码

[英]Python: Run-Length Encoding

如果输入仅包含不带数字的字符,则会出现错误。 例如,如果用户输入“ 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"
非常感谢。

这需要进行两项更改:正如您已经知道的那样,如果num实际上不是数字,则只需使用一次char,然后跳过一个字符。 否则,您将使用数字并在前面跳过两个字符。 但是,您还需要处理单个字符,字符串末尾没有数字。 您不仅可以检查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:])

当下一个字符不是数字时(即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:])

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM