鱼C论坛

 找回密码
 立即注册
查看: 2488|回复: 3

[已解决]萌新求助各位python界大牛!!!

[复制链接]
发表于 2023-4-6 16:30:59 | 显示全部楼层 |阅读模式

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

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

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}%")
求大佬讲解一下这串代码,比如输入“aaaabbccc”是怎么压缩成a4b2c3的
最佳答案
2023-4-6 17:14:59
这段代码实现了一个简单的字符串压缩算法,它通过统计连续重复的字符并记录重复的次数来对字符串进行压缩。下面我来逐行解释这段代码的工作原理。

  • s = input("请输入待压缩字符串:"):从用户获取输入的字符串,赋值给变量 s。
  • ch = s[0]:将 s 的第一个字符赋值给变量 ch,用于后面的比较。
  • result = '':初始化一个空字符串 result,用于存储压缩后的结果。
  • count = 0:初始化一个计数器 count,用于统计连续重复字符的数量。
  • for each in s:遍历输入的字符串 s 的每个字符。
  • if each == ch:如果当前字符 each 与上一个字符(初始值为第一个字符)相同,进行以下操作:
  • count += 1:将计数器 count 的值加 1。
  • else:如果当前字符 each 与上一个字符不相同,进行以下操作:
  • if count > 2:如果计数器 count 的值大于 2(表示有至少 3 个连续重复字符),将 ch 和 count 添加到 result 中。
  • if count == 2:如果计数器 count 的值等于 2(表示有 2 个连续重复字符),将两个 ch 添加到 result 中。
  • if count == 1:如果计数器 count 的值等于 1(表示有 1 个字符),将 ch 添加到 result 中。
  • ch = each:将当前字符 each 赋值给 ch,用于下一轮的比较。
  • count = 1:将计数器 count 重置为 1,开始计算下一组连续重复字符。
  • 最后的两行处理输入字符串最后一组连续重复字符的压缩结果。这部分与之前的步骤类似。
  • print(f"压缩后的字符串:{result}"):输出压缩后的字符串。
  • print(f"压缩率为:{len(result)/len(s)*100:.2f}%"):计算并输出压缩率。


以输入 "aaaabbccc" 为例,过程如下:

1、初始值:ch = 'a', result = '', count = 0
2、遍历 "aaaabbccc" 中的每个字符
a. 当 each = 'a' 时,count 变为 1
b. 当 each 仍然是 'a' 时,count 变为 2
c. 当 each 仍然是 'a' 时,count 变为 3
d. 当 each 仍然是 'a' 时,count 变为 4
e. 当 each 变为 'b' 时,因为 ch = 'a',ch 与 each 不相同,所以将 'a' 和 4 添加到 result(result = 'a4'),ch 更新为 'b',count 重置为 1
f. 当 each 仍然是 'b' 时,count 变为 2
g. 当 each 变为 'c' 时,因为 ch = 'b',ch 与 each 不相同,所以将两个 'b' 添加到 result(result = 'a4b2'),ch 更新为 'c',count 重置为 1
h. 当 each 仍然是 'c' 时,count 变为 2
i. 当 each 仍然是 'c' 时,count 变为 3

3、循环结束后,还需要处理最后一个字符(组)。在本例中,最后一个字符是 'c',并且 count = 3。将 'c' 和 3 添加到 result(result = 'a4b2c3')。

4、输出压缩后的字符串:a4b2c3

5、计算压缩率:原始字符串长度为 9,压缩后的字符串长度为 6,因此压缩率为 (6/9) * 100 = 66.67%。

最终结果为:"压缩后的字符串:a4b2c3",压缩率为 66.67%。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-6 17:14:59 | 显示全部楼层    本楼为最佳答案   
这段代码实现了一个简单的字符串压缩算法,它通过统计连续重复的字符并记录重复的次数来对字符串进行压缩。下面我来逐行解释这段代码的工作原理。

  • s = input("请输入待压缩字符串:"):从用户获取输入的字符串,赋值给变量 s。
  • ch = s[0]:将 s 的第一个字符赋值给变量 ch,用于后面的比较。
  • result = '':初始化一个空字符串 result,用于存储压缩后的结果。
  • count = 0:初始化一个计数器 count,用于统计连续重复字符的数量。
  • for each in s:遍历输入的字符串 s 的每个字符。
  • if each == ch:如果当前字符 each 与上一个字符(初始值为第一个字符)相同,进行以下操作:
  • count += 1:将计数器 count 的值加 1。
  • else:如果当前字符 each 与上一个字符不相同,进行以下操作:
  • if count > 2:如果计数器 count 的值大于 2(表示有至少 3 个连续重复字符),将 ch 和 count 添加到 result 中。
  • if count == 2:如果计数器 count 的值等于 2(表示有 2 个连续重复字符),将两个 ch 添加到 result 中。
  • if count == 1:如果计数器 count 的值等于 1(表示有 1 个字符),将 ch 添加到 result 中。
  • ch = each:将当前字符 each 赋值给 ch,用于下一轮的比较。
  • count = 1:将计数器 count 重置为 1,开始计算下一组连续重复字符。
  • 最后的两行处理输入字符串最后一组连续重复字符的压缩结果。这部分与之前的步骤类似。
  • print(f"压缩后的字符串:{result}"):输出压缩后的字符串。
  • print(f"压缩率为:{len(result)/len(s)*100:.2f}%"):计算并输出压缩率。


以输入 "aaaabbccc" 为例,过程如下:

1、初始值:ch = 'a', result = '', count = 0
2、遍历 "aaaabbccc" 中的每个字符
a. 当 each = 'a' 时,count 变为 1
b. 当 each 仍然是 'a' 时,count 变为 2
c. 当 each 仍然是 'a' 时,count 变为 3
d. 当 each 仍然是 'a' 时,count 变为 4
e. 当 each 变为 'b' 时,因为 ch = 'a',ch 与 each 不相同,所以将 'a' 和 4 添加到 result(result = 'a4'),ch 更新为 'b',count 重置为 1
f. 当 each 仍然是 'b' 时,count 变为 2
g. 当 each 变为 'c' 时,因为 ch = 'b',ch 与 each 不相同,所以将两个 'b' 添加到 result(result = 'a4b2'),ch 更新为 'c',count 重置为 1
h. 当 each 仍然是 'c' 时,count 变为 2
i. 当 each 仍然是 'c' 时,count 变为 3

3、循环结束后,还需要处理最后一个字符(组)。在本例中,最后一个字符是 'c',并且 count = 3。将 'c' 和 3 添加到 result(result = 'a4b2c3')。

4、输出压缩后的字符串:a4b2c3

5、计算压缩率:原始字符串长度为 9,压缩后的字符串长度为 6,因此压缩率为 (6/9) * 100 = 66.67%。

最终结果为:"压缩后的字符串:a4b2c3",压缩率为 66.67%。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-4-7 18:28:53 | 显示全部楼层
isdkz 发表于 2023-4-6 17:14
这段代码实现了一个简单的字符串压缩算法,它通过统计连续重复的字符并记录重复的次数来对字符串进行压缩。 ...

原来如此,感谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-7 18:29:57 | 显示全部楼层
冰箱里的企鹅 发表于 2023-4-7 18:28
原来如此,感谢大佬!

如果答案对你有帮助的话,给个最佳呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 11:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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