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