from io import StringIO
def compress(uncompressed):
dict_size = 256
dictionary = dict((chr(i), i) for i in range(dict_size))
w = ""
result = []
for c in uncompressed:
wc = w + c
if wc in dictionary:
w = wc
else:
result.append(dictionary[w])
dictionary[wc] = dict_size
dict_size += 1
w = c
if w:
result.append(dictionary[w])
return result
def decompress(compressed):
from io import StringIO
dict_size = 256
dictionary = dict((i, chr(i)) for i in range(dict_size))
result = StringIO()
w = chr(compressed.pop(0))
result.write(w)
for k in compressed:
if k in dictionary:
entry = dictionary[k]
elif k == dict_size:
entry = w + w[0]
else:
raise ValueError('Bad compressed k: %s' % k)
result.write(entry)
dictionary[dict_size] = w + entry[0]
dict_size += 1
w = entry
return result.getvalue()
while True:
choice = int(input("Would you like to compress or decompress?: "))
if choice == 1:
phrase = input("Enter the phrase you would like to be compressed: ")
compressed = compress(phrase)
print (compressed)
elif choice == 2:
phrase = input("Enter the phrase you would like to be decompressed: ")
decompressed = decompress(phrase)
print (decompressed)
Я не знаю, правильно ли я это делаю, так что извините, это мой первый пост.
Этот код предназначен для использования метода кодирования lempel ziv для сжатия данных строк, когда пользователь вводит данные, они сжимаются без проблем, но когда программе предлагается распаковать, они ломаются.