Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- window = Tk()
- window.title("LZW")
- window.geometry('600x230')
- topFrame = Frame(window)
- topFrame.pack()
- bottomFrame = Frame(window)
- bottomFrame.pack(side=BOTTOM)
- L1 = Label(topFrame, text="Słowo do zakodowania")
- L1.grid(column=0, row=0)
- L2 = Label(topFrame, text="Słowo do odkodowania (rozdzielone spacjami)")
- L2.grid(column=0, row=3)
- L3 = Label(topFrame, text="Litery należące do słownika (bez spacji)")
- L3.grid(column=0, row=4)
- txt = Entry(topFrame,width=45)
- txt.grid(column=1, row=0, pady=10)
- lbl = Label(topFrame, text="Zakodowane słowo")
- lbl.grid(column=1, row=1, sticky = N)
- lbl2 = Label(topFrame, text="Użyty słownik początkowy")
- lbl2.grid(column=1, row=2, sticky = N)
- txt1 = Entry(topFrame,width=45)
- txt1.grid(column=1, row=3, pady=20)
- txt2 = Entry(topFrame,width=45)
- txt2.grid(column=1, row=4)
- lbl3 = Label(topFrame, text="Odkodowane słowo")
- lbl3.grid(column=1, row=5, sticky = N)
- lbl4 = Label(topFrame, text="Słownik początkowy")
- lbl4.grid(column=1, row=6, sticky = N)
- lbl1 = Label(bottomFrame, text="Sposób kodowania i dekodowania opisany został w konsoli")
- lbl1.grid(column=1, row=7)
- def lzw():
- print(" ")
- print(" ******************************")
- print(" ** ____ **")
- print(" ** | / \ / **")
- print(" ** | / \ /\ / **")
- print(" ** |__ /__ \/ \/ **")
- print(" ** **")
- print(" ******************************")
- print(" ")
- def onechar(uncoded):
- dictionary = []
- for i in range(len(uncoded)):
- if not uncoded[i] in dictionary:
- dictionary += uncoded[i]
- return dictionary
- def moveAllSC(string):
- length = len(string)
- res1, res2 = [], []
- for i in range(length):
- if string[i].isalnum() or string[i] == " ":
- res2 += string[i]
- else:
- res1 += string[i]
- return res2 + res1
- def code(slowo, slownik):
- dict_size = len(slownik)
- dictionary = {slownik[i]: i for i in range(dict_size)}
- result = []
- w = ""
- s = 0
- for c in slowo:
- wc = w + c
- if wc in dictionary:
- w = wc
- else:
- result.append(dictionary[w])
- dictionary[wc] = dict_size
- dict_size += 1
- print("Zakodujemy ",w, " jako ",dictionary[w])
- print("Zakodowane słowo: ", result)
- s += len(w)
- w = c
- print("Do słownika dodamy ", wc)
- print("---")
- print("Obecny słownik: ", dictionary)
- print("Do zakodowania zostało: ", slowo[s:])
- if w:
- result.append(dictionary[w])
- print("Zakodujemy ",w, " jako ",dictionary[w])
- return result
- def decode(slowo, slownik):
- dict_size = len(slownik)
- dictionary = {i: slownik[i] for i in range(dict_size)}
- print("Odkodowujemy ", slowo[0], " jako ", dictionary[slowo[0]])
- print("Odzyskane do tej pory słowo: ", dictionary[slowo[0]])
- print("---")
- print("Do odkodowania pozostało: ", slowo[1:])
- x = slowo.pop(0)
- w = dictionary[x]
- result = w
- s = 0
- for k in slowo:
- if k in dictionary:
- entry = dictionary[k]
- print("Odkodowujemy ", slowo[s], " jako ", dictionary[k])
- print("Odzyskane do tej pory słowo: ", result + dictionary[k])
- elif k == dict_size:
- entry = w + w[0]
- else:
- raise ValueError("Kodowanie jest błędne")
- result += entry
- dictionary[dict_size] = w + entry[0]
- print("Do słownika dodajemy: ", dictionary[dict_size])
- print("---")
- print("Słownik: ", dictionary)
- dict_size += 1
- w = entry
- s += 1
- print("Do odkodowania pozostało: ", slowo[s:])
- return result
- def clicked():
- lzw()
- print("---------------------")
- print("--- ---")
- print("--- KODOWANIE ---")
- print("--- ---")
- print("---------------------")
- dictionary = onechar(txt.get())
- sorted_dictionary = sorted(dictionary)
- print("Nasze słowo: ", txt.get())
- print("Pierwszym krokiem będzie wyznaczenie słownika początkowego zawierającego wszystkie używane litery w kolejności leksykograficznej:")
- sort_dict = moveAllSC(sorted_dictionary)
- print(sort_dict)
- print("a następnie nadanie im numerów")
- dict_weight = {sort_dict[i]: i for i in range(len(sort_dict))}
- print(dict_weight)
- print("Będziemy jednocześnie kodować wyrażenie i tworzyć słownik")
- print("Kolejne części wyrażenia kodujemy najdłuższymi ich odpowiednikami znajdującymi się w słowniku")
- print("Teraz kodowanie przebiega następująco:")
- print("---")
- print("Nasze słowo: ", txt.get())
- compressed = code(txt.get(), sort_dict)
- lbl.configure(text= compressed)
- lbl2.configure(text= sort_dict)
- print(" ")
- print("ZAKODOWANE SŁOWO: ", compressed)
- print(" ")
- def clicked2():
- lzw()
- print("---------------------")
- print("--- ---")
- print("--- ODKODOWANIE ---")
- print("--- ---")
- print("---------------------")
- print("Spróbujmy odkodować otrzymaną wiadomość")
- coded = [int(i) for i in txt1.get().split()]
- print(coded)
- dictionary = onechar(txt2.get())
- sorted_dictionary = sorted(dictionary)
- sort_dict = moveAllSC(sorted_dictionary)
- lbl4.configure(text= sort_dict)
- dict_weight = {sort_dict[i]: i for i in range(len(sort_dict))}
- print("Ponownie zaczynamy od słownika w postaci :", dict_weight)
- decompressed = decode(coded, sort_dict)
- lbl3.configure(text= decompressed)
- print(" ")
- print("ODKODOWANA WIADOMOŚĆ: ", decompressed)
- btn = Button(topFrame, text="Zakoduj", command=clicked)
- btn.grid(column=2, row=0, padx=5)
- btn1 = Button(topFrame, text="Odkoduj", command=clicked2)
- btn1.grid(column=2, row=3, padx=5)
- window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement