【问题标题】:Text compressor doesn't compress the intended way文本压缩器没有压缩预期的方式
【发布时间】:2016-10-05 05:25:35
【问题描述】:

对于学校作业,我必须编写一个 python 程序来压缩文本并使用压缩文本编写一个新文件,同时保留原始文件。例如,文本“heeeeeeeelllooo”到“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()

【问题讨论】:

  • 好吧,对于 iterations 函数中的 while 循环中的初学者,您不断将 re 重新分配为 1,然后将其递增,使其始终为 2。
  • 另外,第一次出现的新字符将由no_iteration() 写入文件,所以如果iterations() also 写入该字符,它会被写入两次。

标签: python python-2.7 compression


【解决方案1】:

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

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) 但什么也没做,导致 while kar: 循环在每个字母之后跳过一个字母致电iterations(a,b)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多