【问题标题】:Run length decompression python [closed]运行长度解压python [关闭]
【发布时间】:2021-02-18 04:19:16
【问题描述】:

我正在尝试制作一个不使用 1 的运行长度解码器。例如,可以通过的字符串类似于'''A2C3GTA'''。我做了我认为可行的东西,但很难找到哪里出错了。我是python的初学者,所以很抱歉这个简单的问题。谢谢!

def decode(compressed):
    decoded= ""
    count = 0

    for x in compressed :
        if x.isdigit():
            
            count += int(x)
            y = compressed
            decoded += y[int(x)+1] * count
            count = 0
        else :
            decoded += x
        
           
    print (decoded)  

【问题讨论】:

  • 请提供预期的MRE - Minimal, Reproducible Example。显示中间结果与预期结果的偏差。我们应该能够将您的代码块粘贴到文件中,运行它并重现您的问题。这也让我们可以在您的上下文中测试任何建议。我们还希望您在错误点之前跟踪可疑值。您对他们如何达到这些价值观感到困惑?

标签: python python-3.x run-length-encoding


【解决方案1】:

当您找到一个数字-字母对时,您无法在展开该对后跳过该字母。这是因为您使用了 for 循环,这是一个比您的逻辑想要的更严格的结构。相反,请尝试:

idx = 0
while idx < len(compressed):
    char = compressed[idx]
    if char.isdigit():
        # replicate next character
        idx += 2
    else:
        decoded += char
        idx += 1

这将照顾您的迭代。

您在适当的复制中,输出中的22,这来自对位置的错误引用:

        decoded += y[int(x)+1] * count

这里,x 是运行长度,不是字符的位置。如果输入是A7B,这个格式错误的表达式会因为索引越界而出错。

在我上面给你的代码中,继续使用idx作为索引。

我相信你可以从这里完成。

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2010-11-04
    相关资源
    最近更新 更多