文本压缩器不会压缩预期的方式

时间:2016-10-04 20:34:19

标签: python python-2.7 compression

对于学校作业,我必须编写一个python程序来压缩文本并用压缩文本写一个新文件,保存原文。例如,文本“heeeeeeellllooo”到“he7l4o3”。因此,随后迭代的每个字符必须由字符替换,并且必须直接跟随迭代次数,除非迭代次数当然是1。但是,我不会得到压缩文本“he7l4o3”,而是获得“hee2ll2oo2”。

我做错了什么?

代码:

inp =  open("hello.txt", "r")
out = open("compr.txt", "w")
kar=inp.read(1)
prevkar=''

def iterations(a,b):
    while a==b:
        re=1
        re+=1
        b = a
        a = inp.read(1)
    out.write(b + str(re))
    return

def no_iteration(a):
    out.write(a)
    return

while kar:
    if kar==prevkar:
        iterations(kar, prevkar)
        prevkar=kar
        kar=inp.read(1)
    else:
        no_iteration(kar)
        prevkar=kar
        kar=inp.read(1)

inp.close()
out.close()

1 个答案:

答案 0 :(得分:0)

这是一个正确的解决方案:

inp =  open("hello.txt", "r")
out = open("compr.txt", "w")
kar=inp.read(1)
prevkar=''

def iterations(a,b):
    re = 1
    while a==b:
        re+=1
        b = a
        a = inp.read(1)
    out.write(str(re))
    return a

def no_iteration(a):
    out.write(a)
    return

while kar:
    if kar==prevkar:
        prevkar=kar
        kar = iterations(kar, prevkar)
    else:
        no_iteration(kar)
        prevkar=kar
        kar=inp.read(1)

inp.close()
out.close()

错误数字的问题是因为您每次循环播放字母时都将re设置为1,同时iterations(a, b)执行了一次inp.read(1)但没有对其进行任何操作,因此{{1}每次调用while kar:

后,循环跳过一个字母