laocaiye 发表于 2025-10-6 20:07:57

关于第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 20:59:40

本帖最后由 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>

laocaiye 发表于 2025-10-6 23:51:25

看不懂你每段开头待代码,我刚学到第34讲。
页: [1]
查看完整版本: 关于第32讲字符串(VI)动动手作业1的实现