【问题标题】:Encoding and Decoding using RLE and Python 3.7 [duplicate]使用 RLE 和 Python 3.7 进行编码和解码 [重复]
【发布时间】:2019-10-07 13:32:37
【问题描述】:

在我的计算机科学课程中,我被分配了一项任务,即使用 RLE 对 ASCII 艺术进行编码和解码。它必须像“07A05B08C11D”一样输出 AAAAAABBBBBCCCCCCCCDDDDDDDDDDD”。它必须在小于 10 的数字/数量之前显示 0,但我找不到有关如何执行此操作的教程/说明 - 他们没有解释 0。此外,它必须采用 ASCII 艺术来自未在 IDLE 中输入的文本文件。它还必须通过使用 0 的输入来反转此过程。

对此的任何帮助都会很棒。提前致谢。

【问题讨论】:

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


    【解决方案1】:

    您可以使用itertools.groupby 进行行程编码,使用f-string 格式化单个数字:

    from itertools import  groupby
    
    s = "AAAAAABBBBBCCCCCCCCDDDDDDDDDDD"
    
    result = ''.join(f'{sum(1 for _ in group):02}{k}' for k, group in groupby(s))
    
    print(result)
    

    输出

    06A05B08C11D
    

    此语句sum(1 for _ in group) 用于计算每个组中元素的数量。

    【讨论】:

    • 谢谢。我对 Python 还很陌生,但我们过早地完成了这项任务——我们应该再过 8 个月或在此之前学习 Python,但我们的老师是新手,所以认为我们已经学会了我们需要的东西。无论如何,这很棒,再次感谢!
    • @JoeHawkins 很高兴我能帮上忙。
    • 看来我遇到了一些障碍。它编码完美,除了一个细节 - 它编码的每一行新行都会在其末尾添加“01”。所以它的意思是输出“01,01a01d57801d01a01”,但它实际上输出了“01,01a01d57801d01a01,01”。注意额外的“01”。它在每一行都这样做,我不知道为什么。这就是我需要解决的所有问题以使其完美,感谢您迄今为止的所有帮助。
    • 我给它一个 .txt 文件,里面有一个 ASCII 艺术图像(多行)。我猜额外的 01 可能来自以文本文件结尾的行?
    • 已接受。再次感谢。
    猜你喜欢
    • 2019-12-17
    • 2013-05-11
    • 2021-03-18
    • 2020-07-22
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多