2016-10-04 141 views
0

對於學校任務,我必須編寫一個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() 
+0

那麼,對於'iterations'函數中while循環的初學者,你需要將're'重新賦值給1,然後遞增它,使得它始終爲2. –

+0

此外,第一次出現的新字符將被寫入文件的'no_iteration()',所以如果'iterations()'_also_寫入字符,它會被寫入兩次。 –

回答

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)但是沒有做任何事情,使得while kar:循環跳過一個字母后,每次打電話給iterations(a,b)