鱼C论坛

 找回密码
 立即注册
查看: 2414|回复: 2

[已解决]字符串压缩

[复制链接]
发表于 2022-12-6 18:40:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

ch = s[0]
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),
为什么还要写这一句,上面的不能直接得出结果嘛
最佳答案
2022-12-6 19:02:58
本帖最后由 lxping 于 2022-12-6 19:08 编辑

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

ch = s[0]
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%
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-6 19:02:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lxping 于 2022-12-6 19:08 编辑

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

ch = s[0]
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%

评分

参与人数 1鱼币 +1 收起 理由
hellometa + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-6 19:21:10 | 显示全部楼层
lxping 发表于 2022-12-6 19:02
你是在for循环的最后将 ch = each 的,循环里面的ch代表的是上一次提前到的each值 , 所以最后一次的each并 ...

我明白了,大佬,thankyou
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 11:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表