Python tkinter encoder which but the program is so long

Python tkinter encoder which but the programme is so long

所以我的想法是制作一个编码器,我的意思是当用户在名为文本的标签中写入例如“a”时,程序粘贴前“}”的结果等等。

问题是我是否必须为字母表中的每个字母和标签文本中的每个位置写“if”我的意思是如果 user_code[0] 如果 user_code[1] 等等

import tkinter as tk

#making main window
root = tk.Tk()
root.title("Szyfrator")
root.geometry("600x300")

#getting text
def getting_Text():
    user_code = text.get("1.0",'end-1c')
    if user_code[0] == 'a' :
       result.insert(tk.END, '[', 'big')
    if user_code[0] == 'b':
        result.insert(tk.END, ';', 'big')
#UX of the window
right_margin = tk.Frame(root)
right_margin.pack (side=tk.RIGHT, expand =tk.YES , fill=tk.BOTH)
left_margin = tk.Frame(root)
left_margin.pack(side=tk.LEFT, expand=tk.YES, fill=tk.BOTH)
#after clicking button function getting_text() is used
button = tk.Button( root , text = "Szyfruj", activebackground = "#FFFFFF", command=getting_Text)
button.pack( side = tk.TOP )
text=tk.Text(root, width=36, height=15 )
text.pack(side= tk.LEFT)
result= tk.Text(root, width=36, height=15 )
result.pack(side=tk.RIGHT)


#  ):


root.mainloop()

不,您可以使用 for 循环遍历 user_code 的字母,并创建字典将一个字母映射到另一个字母。

encoded = {
    "a": "[",
    "b": ";"
}

def getting_Text():
    user_code = text.get("1.0", 'end-1c')
    for letter in user_code:
        try:
            result.insert(tk.END, encoded[letter], 'big')
        except KeyError: # if we don't have an encoding for a letter, a KeyError will be raised which we capture
            print("Oops, no encoding found for letter %s" % letter)

如果您有许多不同的字母编码并且不想输入这么多逗号、引号、冒号,您甚至可以像这样创建字典:

letters = "abcdefghijklmnopqrstuvwxyz" # letters and encodings must have the same amount of symbols, else it may give you an IndexError: index out of range
encodings = "[;]:_-#'+*´`?=)(/&%$§!°^<>"
encoded = {key: value for key, value in zip(list(letters), list(encodings))}