使用沿字符串重复的字符对字符串进行编码和解码

Encode and Decode a String using the repetition of characters along the string

我一直在努力解决这个问题,但到目前为止我还没有成功 :( 所以任何指导都会很棒,特别是因为我刚刚开始学习 Python,所以问题是这个:

给定一个字符串,首先你必须使用以下算法对其进行编码:

完成编码后,您必须创建一个函数来使用相同的 criteria/assumptions.

对其进行解码

它应该如何工作的一些例子:

到目前为止,我有以下编码代码:

def encode(s) :
 
    i = 0
    while( i < len(s) - 1) : 
        count = 1 
        while s[i] == s[i + 1] :
            i += 1
            count += 1
             
            if i + 1 == len(s):
                break         
        print(str(s[i]) + str(count),  
                          end = "")
        i += 1 
    print()

# Code for the driver
if __name__ == "__main__" :

    encode("Goooooooooddddd")
    encode("Oooo") 

With this I'm getting the needed output for the encoding part at least.

但我无法通过使用此编码作为起点来实际执行 “解码” 部分。

我知道这个问题很复杂 silly/basic 但我实在想不通 在此先感谢 guidance/tips 对这个挑战问题

伪代码解码将涉及:

  1. 逐个字符扫描编码字符串
  2. 如果字符是字母则将其添加到解码结果
  3. 对 1 个或多个字符的数字序列的编码字符串进行子扫描,直到下一个字母字符或字符串结尾。
  4. 重复最后一个解码的字符串字符这么多次减一。
  5. 从第 1 步继续,直到编码字符串被完全消耗。

解码在 python 中会非常简单,因为它允许字符乘法: 它可能是这样的:

def decode(s):
    a = list(s) # separate each character and number
    i = 0
    z = len(a)
    while i < z-1:   #This for block checks for any 2 digit numbers
        print(i, a[i])
        if a[i].isdigit() and a[i+1].isdigit():
            a[i] = a[i]+a[i+1]
            a.pop(i+1)
            print(a)
            z-=1
            try: 
                if a[i+2].isdigit():
                    i-=1
            except IndexError:
                i-=1
        i+=1
    final_str = '' # the string that will have the value
    for i in range(0, len(a), 2):
        final_str += a[i]*int(a[i+1]) #a[i] is the character and int(a[i+1]) is the number of times. 
                                      # They are multiplied and then added to the final string
    print(final_str) # The final string is printed

感谢@Tobi208 指出错误。