萌新求助各位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的 这段代码实现了一个简单的字符串压缩算法,它通过统计连续重复的字符并记录重复的次数来对字符串进行压缩。下面我来逐行解释这段代码的工作原理。
[*]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%。 isdkz 发表于 2023-4-6 17:14
这段代码实现了一个简单的字符串压缩算法,它通过统计连续重复的字符并记录重复的次数来对字符串进行压缩。 ...
原来如此,感谢大佬! 冰箱里的企鹅 发表于 2023-4-7 18:28
原来如此,感谢大佬!
如果答案对你有帮助的话,给个最佳呗{:5_92:}
页:
[1]