hcm666 发表于 2023-4-9 15:56:07

解压的地方没有东西输出呢不明白

#利用字符重复出现的次数,编写一个程序,实现基本的字符串压缩功能。
#比如,字符串 FFiiiisshCCCCCC 压缩后变成 F2i4s2h1C6(15字符 -> 10字符,66% 压缩率)。
#所以对于重复次数小于 3 的字符,我们的程序应该选择不对其进行压缩


#压缩字符
text = input('请输入一个字符串')
num=0
text1 = []
text2 = ''
text3 = []
for i in text:
    for j in text:
         if i==j:
             num+=1
    text1.append()
    num=0
print(text1)
i=0

while i<len(text1):
    if text1>3:
      print(text1,end='')
      text3.append(text1)
      ''.join((text2,text1))
      print(text1,end='')
      text3.append(text1)
      ''.join((text2,str(text1)))
      i=i+text1
    else:
      print(text1,end='')
      text3.append(text1)
      ''.join((text2,str(text1)))
      i=i+1


print(text2)
print(text3)

#解压

m = 0
h = 0

for i in text2:
    if text2.isdecimal():
      while m<int(i):
            print(text2,end='')
      h = h + 1
    else:
      print(i,end='')
      h = h + 1
{:5_99:}

isdkz 发表于 2023-4-9 15:57:21

本帖最后由 isdkz 于 2023-4-9 15:58 编辑

您的代码中有一些问题,让我帮您修正这些问题并提供一个有效的解决方案。

def compress_string(text):
    compressed = []
    count = 1

    for i in range(1, len(text)):
      if text == text:
            count += 1
      else:
            if count < 3:
                compressed.extend(] * count)
            else:
                compressed.append(text)
                compressed.append(str(count))
            count = 1

    if count < 3:
      compressed.extend(] * count)
    else:
      compressed.append(text[-1])
      compressed.append(str(count))

    return ''.join(compressed)


# 压缩字符
text = input('请输入一个字符串: ')
compressed_text = compress_string(text)
print(f"压缩后的字符串: {compressed_text}")

# 解压字符
def decompress_string(compressed_text):
    decompressed = []
    i = 0

    while i < len(compressed_text):
      if compressed_text.isdigit():
            count = int(compressed_text)
            decompressed.extend(] * count)
            i += 1
      else:
            if not (i + 1 < len(compressed_text) and compressed_text.isdigit()):
                decompressed.append(compressed_text)
            i += 1

    return ''.join(decompressed)


decompressed_text = decompress_string(compressed_text)
print(f"解压后的字符串: {decompressed_text}")

这个解决方案中,首先定义了一个名为compress_string的函数,用于压缩输入的字符串。

接着,定义了一个名为decompress_string的函数,用于解压缩压缩过的字符串。

最后,我们调用这两个函数来压缩和解压缩用户输入的字符串。

sfqxx 发表于 2023-4-9 15:57:52

占楼

hcm666 发表于 2023-4-9 16:02:55

isdkz 发表于 2023-4-9 15:57
您的代码中有一些问题,让我帮您修正这些问题并提供一个有效的解决方案。




我想知道按我那个代码为啥解压前text2的长度会是0,大佬教教

sfqxx 发表于 2023-4-9 16:05:05

hcm666 发表于 2023-4-9 16:02
我想知道按我那个代码为啥解压前text2的长度会是0,大佬教教

根据给出的代码,发现 `text2` 长度为 0 的原因是在压缩的过程中,虽然有一行代码 `''.join((text2,str(text1)))`,但并没有将新的字符串添加到 `text2` 中。这是因为在 python 中,字符串对象是不可变的,每次对字符串做修改时,会生成一个新的字符串对象。所以需要将这句代码改成 `text2 = ''.join((text2,str(text1)))`,即将新的字符串对象赋值给 `text2` 变量,才能实现将数字字符串拼接起来。

isdkz 发表于 2023-4-9 16:05:22

本帖最后由 isdkz 于 2023-4-9 16:07 编辑

hcm666 发表于 2023-4-9 16:02
我想知道按我那个代码为啥解压前text2的长度会是0,大佬教教

您好!在您的代码中,text2 的长度为 0 是因为您在将字符追加到 text2 时使用了错误的方法。

您在这段代码中使用了两种方法,但它们都没有正确地修改 text2。以下是您的代码中存在问题的部分:


1、''.join((text2,text1[i]))
2、'.join((text2,str(text1])))


您应该使用 += 运算符来将字符追加到 text2。以下是修改后的代码:

text2 += text1
text2 += str(text1)

不过,您的代码中还存在其他问题。以下是修正这些问题后的完整代码:

# 压缩字符
text = input('请输入一个字符串: ')
num = 0
text1 = []

for i in text:
    if i not in for item in text1]:
      num = text.count(i)
      text1.append()

text2 = ''
i = 0

while i < len(text1):
    if text1 > 2:
      text2 += text1
      text2 += str(text1)
      i += 1
    else:
      text2 += text1 * text1
      i += 1

print(text2)

# 解压
m = 0
h = 0

while h < len(text2):
    if text2.isdigit():
      m = int(text2)
      for _ in range(m - 1):
            print(text2, end='')
      h += 1
    else:
      print(text2, end='')
      h += 1

这段代码首先计算每个字符在字符串中出现的次数,然后根据出现次数来决定是否压缩字符。

注意,这种压缩方法在某些情况下可能会导致压缩后的字符串比原始字符串更长,例如当输入为 "aabbcc" 时。最后,使用一个简单的循环来解压缩字符串。

歌者文明清理员 发表于 2023-4-9 16:10:43

sfqxx 发表于 2023-4-9 16:05
根据给出的代码,发现 `text2` 长度为 0 的原因是在压缩的过程中,虽然有一行代码 `''.join((text2,str ...

注意整理chatgpt格式哈

sfqxx 发表于 2023-4-9 16:17:04

歌者文明清理员 发表于 2023-4-9 16:10
注意整理chatgpt格式哈

ok
页: [1]
查看完整版本: 解压的地方没有东西输出呢不明白