冰箱里的企鹅 发表于 2023-4-6 16:30:59

萌新求助各位python界大牛!!!

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}%")
求大佬讲解一下这串代码,比如输入“aaaabbccc”是怎么压缩成a4b2c3的

isdkz 发表于 2023-4-6 17:14:59

这段代码实现了一个简单的字符串压缩算法,它通过统计连续重复的字符并记录重复的次数来对字符串进行压缩。下面我来逐行解释这段代码的工作原理。


[*]s = input("请输入待压缩字符串:"):从用户获取输入的字符串,赋值给变量 s。

[*]ch = s:将 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%。

冰箱里的企鹅 发表于 2023-4-7 18:28:53

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

原来如此,感谢大佬!

isdkz 发表于 2023-4-7 18:29:57

冰箱里的企鹅 发表于 2023-4-7 18:28
原来如此,感谢大佬!

如果答案对你有帮助的话,给个最佳呗{:5_92:}
页: [1]
查看完整版本: 萌新求助各位python界大牛!!!