关于第32讲字符串(VI)动动手作业1的实现
#流程说明:循环取出字符串src中的首字母,判断是否为非数字,如果是非数字,就添加到目标字符串res中,#然后从src中去除这个字符
#如果是数字,就把连续的数字字符串存入numStr中,然后根据numStr拼接res,同时从src中去除numStr
src = input("请输入待解压字符串:").strip()
res = ""
#定义变量,存储某个字母后面的数字
numStr=""
while src != "":
c = src
if c.isdigit() != True:#当前字符不是数字,就加入res,然后src去除当前字符
res += c
src = src.lstrip(c)
else:#如果当前字符是数字,就继续判断下一个字符也是数字,如果是,就拼接numStr
for each in src:
if each.isdigit() == True:
numStr += each
else:
break
res += "".join(res*(int(numStr)-1))#这里要注意:res中已经存在一个要拼接的目标字符
src = src.lstrip(numStr)#src去除numStr字符串
numStr = ""#重置numStr
print(res)
本帖最后由 jackz007 于 2025-10-6 22:21 编辑
def compress(src) :
r , i = '' , 1
while i < len(src) :
k = i - 1
while i < len(src) and src == src :
i += 1
r = r + src + str(i - k) if i - k > 2 else r + src * (i - k)
i += 1
return r
def expand(src) :
r , i = '' , 1
while i < len(src) :
k = i - 1
while i < len(src) and src . isdigit() :
i += 1
r = r + src * int(src) if i > k + 1 else r + src
i += 1
return r
s = input('字符串:')
if s . strip() :
x = compress(s . strip())
z = expand(x)
print('压缩前:' + s . strip())
print('压缩后:' + x)
print('解压后:' + z)
print('压缩率:%.2f%%' % (100.0 * len(x) / len(z)))
【运行实况】:
D:\\\\compress.string>python x.py
字符串:FFiiiisshCCCCCC
压缩前:FFiiiisshCCCCCC
压缩后:FFi4sshC6
解压后:FFiiiisshCCCCCC
压缩率:60.00%
D:\\\\compress.string>python x.py
字符串:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBcccccccccccccccccccccccccccccccccccccccccc
压缩前:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBcccccccccccccccccccccccccccccccccccccccccc
压缩后:A53B5c42
解压后:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBcccccccccccccccccccccccccccccccccccccccccc
压缩率:8.00%
D:\\\\compress.string> 看不懂你每段开头待代码,我刚学到第34讲。
页:
[1]