Python 如何编写解码器,然后用pytest测试?

Python 如何编写解码器,然后用pytest测试?,python,decoder,Python,Decoder,对于一个学校作业,我必须用Python编写一个编码器和解码器,它接受一个编码字符字符串,如“2k3b”,并将其解码为“KKBB”。我已经编写了编码器,并用pytest进行了测试,但我似乎无法专心编写解码器。编码器和解码器的代码分别发布在下面 def encode(mess): """ Run length encoding - convert string from 'wwwwwwbbbb' til '6w4b'""" res = [

对于一个学校作业,我必须用Python编写一个编码器和解码器,它接受一个编码字符字符串,如“2k3b”,并将其解码为“KKBB”。我已经编写了编码器,并用pytest进行了测试,但我似乎无法专心编写解码器。编码器和解码器的代码分别发布在下面

def encode(mess):
""" Run length encoding - convert string from 'wwwwwwbbbb' til '6w4b'""" 
res = []
old_val = mess[0]
count = 0

for char in mess:
    if char == old_val:
        count += 1
    else:
        res.append('%d%c' % (count, old_val))
        old_val = char
        count = 1
res.append('%d%c' % (count, char))
return ''.join(res)
我知道last
res.append(“%d%c%”(count,char))
的编码很糟糕,但我必须让它正常工作,而且我对Python的经验还不够

def decode(mess):
"""Run length decoding - convert string from '2k3b' to 'kkbbb'"""
res = []
num = 0
letter = ''
for char in mess:
    mess.split()
    if char.isdigit():
        num = int(char)
    else:
        num = 0
        res.append(num * '%c' % letter)
return ''.join(res)
译码器还没完成,只是我停了下来,因为我看不到我该做什么。我通常为所有的助理编写伪代码,我也为编码器和解码器编写了伪代码,但由于某种原因,解码器无法让我理解。
我相信我只是失去了我的思路,但我真的可以在这一点上使用一些指导。我不愿意问我的老师,因为他只会给我看他的代码,我不会从中学到任何东西。

您当前的方法将仅限于一个数字字符串,并且在查找10个或更多的字符串时会遇到困难,相反,最好使用正则表达式来查找后跟字符的数字字符串,然后将这些字符串连接在一起

import re
letter_groups = re.findall("(\d+)(\D+)", mess)
return  "".join(f"{c * int(num)}" for num, c in letter_groups)

你就快到了。下面是您的方法,但很少有小改动

def decode(mess):
    """Run length decoding - convert string from '2k3b' to 'kkbbb'"""
    res = []
    num = ''
    for char in mess:
        #If char an integer just add it to current num
        # required for cases where integer will be greater than 9.
        if char.isdigit():
            num += char
        else:
        # "a"* int("3") = "aaa" we can use this property to expand 
        # after expanding just set the num to 0
            res.append(char*int(num))
            num = ''
    return ''.join(res)
测试:

>>>print(decode(encode('kkkkkkkkkkkkkkkkkwwkkeeerrr'))=="kkkkkkkkkkkkkkkkkwwkkeeerrr"))
True