twkkndt 发表于 2022-12-6 18:40:02

字符串压缩

s = input("请输入待压缩字符串:")

ch = s
result = ''
count = 0

for each in s:
    if each == ch:
      count += 1
    else:
      if count > 2:
            result += ch + str(count)
      if count == 2:
            result += ch + ch
      if count == 1:
            result += ch
      ch = each
      count = 1

if count == 1:
    result += ch
else:
    result += ch + str(count)

print(f"压缩后的字符串:{result}")
print(f"压缩率为:{len(result)/len(s)*100:.2f}%")

想请问,倒数第六行这里的
if count == 1:
    result += ch
else:
    result += ch + str(count),
为什么还要写这一句,上面的不能直接得出结果嘛

lxping 发表于 2022-12-6 19:02:58

本帖最后由 lxping 于 2022-12-6 19:08 编辑

你是在for循环的最后将 ch = each 的,循环里面的ch代表的是上一次提前到的each值 , 所以最后一次的each并没有加进去最后的 result 里面,你可以自己试一下将最后的删掉看一下运行结果,当最后的字符重复时,整个重复的字符都会漏掉
s = input("请输入待压缩字符串:")

ch = s
result = ''
count = 0

for each in s:
    if each == ch:
      count += 1
    else:
      if count > 2:
            result += ch + str(count)
      if count == 2:
            result += ch + ch
      if count == 1:
            result += ch
      ch = each
      count = 1

print(f"压缩后的字符串:{result}")
print(f"压缩率为:{len(result)/len(s)*100:.2f}%")
= RESTART: C:/Users/Administrator/Desktop/python/homework/once a week/yszfc.py =
请输入待压缩字符串:aaaabbbbbcccccccfg
压缩后的字符串:a4b5c7f    # g 漏掉了
压缩率为:38.89%

= RESTART: C:/Users/Administrator/Desktop/python/homework/once a week/yszfc.py =
请输入待压缩字符串:aaaabbbbbddcccccccee
压缩后的字符串:a4b5ddc7    # ee 漏掉了或者说 e2 漏掉了
压缩率为:40.00%

twkkndt 发表于 2022-12-6 19:21:10

lxping 发表于 2022-12-6 19:02
你是在for循环的最后将 ch = each 的,循环里面的ch代表的是上一次提前到的each值 , 所以最后一次的each并 ...

我明白了,大佬,thankyou{:5_105:}{:5_105:}
页: [1]
查看完整版本: 字符串压缩