Advertisement
Guest User

Untitled

a guest
Jul 15th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.01 KB | None | 0 0
  1. from tkinter import *
  2.  
  3. window = Tk()
  4. window.title("LZW")
  5. window.geometry('600x230')
  6.  
  7. topFrame = Frame(window)
  8. topFrame.pack()
  9. bottomFrame = Frame(window)
  10. bottomFrame.pack(side=BOTTOM)
  11.  
  12. L1 = Label(topFrame, text="Słowo do zakodowania")
  13. L1.grid(column=0, row=0)
  14. L2 = Label(topFrame, text="Słowo do odkodowania (rozdzielone spacjami)")
  15. L2.grid(column=0, row=3)
  16. L3 = Label(topFrame, text="Litery należące do słownika (bez spacji)")
  17. L3.grid(column=0, row=4)
  18. txt = Entry(topFrame,width=45)
  19. txt.grid(column=1, row=0, pady=10)
  20. lbl = Label(topFrame, text="Zakodowane słowo")
  21. lbl.grid(column=1, row=1, sticky = N)
  22. lbl2 = Label(topFrame, text="Użyty słownik początkowy")
  23. lbl2.grid(column=1, row=2, sticky = N)
  24.  
  25. txt1 = Entry(topFrame,width=45)
  26. txt1.grid(column=1, row=3, pady=20)
  27. txt2 = Entry(topFrame,width=45)
  28. txt2.grid(column=1, row=4)
  29.  
  30. lbl3 = Label(topFrame, text="Odkodowane słowo")
  31. lbl3.grid(column=1, row=5, sticky = N)
  32.  
  33. lbl4 = Label(topFrame, text="Słownik początkowy")
  34. lbl4.grid(column=1, row=6, sticky = N)
  35.  
  36.  
  37.  
  38. lbl1 = Label(bottomFrame, text="Sposób kodowania i dekodowania opisany został w konsoli")
  39. lbl1.grid(column=1, row=7)
  40.  
  41.  
  42. def lzw():
  43. print(" ")
  44. print(" ******************************")
  45. print(" ** ____ **")
  46. print(" ** | / \ / **")
  47. print(" ** | / \ /\ / **")
  48. print(" ** |__ /__ \/ \/ **")
  49. print(" ** **")
  50. print(" ******************************")
  51. print(" ")
  52.  
  53. def onechar(uncoded):
  54. dictionary = []
  55. for i in range(len(uncoded)):
  56. if not uncoded[i] in dictionary:
  57. dictionary += uncoded[i]
  58. return dictionary
  59.  
  60. def moveAllSC(string):
  61. length = len(string)
  62. res1, res2 = [], []
  63. for i in range(length):
  64. if string[i].isalnum() or string[i] == " ":
  65. res2 += string[i]
  66. else:
  67. res1 += string[i]
  68. return res2 + res1
  69.  
  70. def code(slowo, slownik):
  71. dict_size = len(slownik)
  72. dictionary = {slownik[i]: i for i in range(dict_size)}
  73. result = []
  74. w = ""
  75. s = 0
  76. for c in slowo:
  77. wc = w + c
  78. if wc in dictionary:
  79. w = wc
  80. else:
  81. result.append(dictionary[w])
  82. dictionary[wc] = dict_size
  83. dict_size += 1
  84. print("Zakodujemy ",w, " jako ",dictionary[w])
  85. print("Zakodowane słowo: ", result)
  86. s += len(w)
  87. w = c
  88. print("Do słownika dodamy ", wc)
  89. print("---")
  90. print("Obecny słownik: ", dictionary)
  91. print("Do zakodowania zostało: ", slowo[s:])
  92. if w:
  93. result.append(dictionary[w])
  94. print("Zakodujemy ",w, " jako ",dictionary[w])
  95. return result
  96.  
  97.  
  98. def decode(slowo, slownik):
  99. dict_size = len(slownik)
  100. dictionary = {i: slownik[i] for i in range(dict_size)}
  101. print("Odkodowujemy ", slowo[0], " jako ", dictionary[slowo[0]])
  102. print("Odzyskane do tej pory słowo: ", dictionary[slowo[0]])
  103. print("---")
  104. print("Do odkodowania pozostało: ", slowo[1:])
  105. x = slowo.pop(0)
  106. w = dictionary[x]
  107. result = w
  108. s = 0
  109. for k in slowo:
  110. if k in dictionary:
  111. entry = dictionary[k]
  112. print("Odkodowujemy ", slowo[s], " jako ", dictionary[k])
  113. print("Odzyskane do tej pory słowo: ", result + dictionary[k])
  114. elif k == dict_size:
  115. entry = w + w[0]
  116. else:
  117. raise ValueError("Kodowanie jest błędne")
  118. result += entry
  119. dictionary[dict_size] = w + entry[0]
  120. print("Do słownika dodajemy: ", dictionary[dict_size])
  121. print("---")
  122. print("Słownik: ", dictionary)
  123. dict_size += 1
  124. w = entry
  125. s += 1
  126. print("Do odkodowania pozostało: ", slowo[s:])
  127. return result
  128.  
  129. def clicked():
  130. lzw()
  131. print("---------------------")
  132. print("--- ---")
  133. print("--- KODOWANIE ---")
  134. print("--- ---")
  135. print("---------------------")
  136. dictionary = onechar(txt.get())
  137. sorted_dictionary = sorted(dictionary)
  138. print("Nasze słowo: ", txt.get())
  139. print("Pierwszym krokiem będzie wyznaczenie słownika początkowego zawierającego wszystkie używane litery w kolejności leksykograficznej:")
  140. sort_dict = moveAllSC(sorted_dictionary)
  141. print(sort_dict)
  142. print("a następnie nadanie im numerów")
  143. dict_weight = {sort_dict[i]: i for i in range(len(sort_dict))}
  144. print(dict_weight)
  145. print("Będziemy jednocześnie kodować wyrażenie i tworzyć słownik")
  146. print("Kolejne części wyrażenia kodujemy najdłuższymi ich odpowiednikami znajdującymi się w słowniku")
  147. print("Teraz kodowanie przebiega następująco:")
  148. print("---")
  149. print("Nasze słowo: ", txt.get())
  150. compressed = code(txt.get(), sort_dict)
  151. lbl.configure(text= compressed)
  152. lbl2.configure(text= sort_dict)
  153. print(" ")
  154. print("ZAKODOWANE SŁOWO: ", compressed)
  155. print(" ")
  156.  
  157. def clicked2():
  158. lzw()
  159. print("---------------------")
  160. print("--- ---")
  161. print("--- ODKODOWANIE ---")
  162. print("--- ---")
  163. print("---------------------")
  164. print("Spróbujmy odkodować otrzymaną wiadomość")
  165.  
  166. coded = [int(i) for i in txt1.get().split()]
  167. print(coded)
  168. dictionary = onechar(txt2.get())
  169. sorted_dictionary = sorted(dictionary)
  170. sort_dict = moveAllSC(sorted_dictionary)
  171. lbl4.configure(text= sort_dict)
  172. dict_weight = {sort_dict[i]: i for i in range(len(sort_dict))}
  173. print("Ponownie zaczynamy od słownika w postaci :", dict_weight)
  174. decompressed = decode(coded, sort_dict)
  175. lbl3.configure(text= decompressed)
  176. print(" ")
  177. print("ODKODOWANA WIADOMOŚĆ: ", decompressed)
  178.  
  179.  
  180. btn = Button(topFrame, text="Zakoduj", command=clicked)
  181. btn.grid(column=2, row=0, padx=5)
  182.  
  183. btn1 = Button(topFrame, text="Odkoduj", command=clicked2)
  184. btn1.grid(column=2, row=3, padx=5)
  185. window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement