当前位置 : 首页 » 互动问答 » 正文

声明一个变量global不能在整个代码片段中工作

分类 : 互动问答 | 发布时间 : 2015-10-29 20:32:38 | 评论 : 1 | 浏览 : 27 | 喜欢 : 0

下面是一个给用户4个选项的代码片段。要么:加密消息,解密消息,更改 encryption_code 或显示 encryption_code .

 import tkinter
从tkinter导入*
从tkinter导入ttk
来自tkinter.ttk import *

字母='ABCDEFGHIJKLMNOPQRSTUVWXYZ'

encryption_code ='LFWOAYUISVKMNXPBDCRJTQEGHZ'
字母+ = letters.lower()
encryption_code + = encryption_code.lower()
enc = dict(zip(letters,encryption_code))

dec = dict(zip(encryption_code,letters))

window = tkinter.Tk()

style = ttk.Style(window)
style.configure( “BW.TLabel”)

encrypt_frame = tkinter.Frame(窗口)

encrypted_frame = tkinter.Frame(窗口)

change_frame = tkinter.Frame(窗口)
changed_frame = tkinter.Frame(窗口)

entry = tkinter.Entry(encrypt_frame)
encrypt_entry = tkinter.Entry(change_frame)

encryptget = encrypt_entry.get()

def code_change():
    全球changed_frame
    全局encrypt_entry
    全局encryption_code
    全局加密

    如果len(加密)== 26:
        encryption_code = encryptget
        encryption_code + = encryption_code.lower()
        changed_label.configure(背景= window.cget( 'BG'))
        changed_label.config(text =“您已成功更改加密代码!”)
        change_header.config(text =“Your code is:”+ str(encryptget.upper()))
        changed_frame.pack_forget()
        changed_label.pack()
        changed_frame.pack()


def encrypt():
    全局encrypt_frame
    entry.focus_set()
    entry.pack()
    encrypt_confirm.pack()
    back_button.pack()
    encrypt_frame.pack()
    first_frame.pack_forget()

def display_encrypt():
    全局encryption_code
    如果len(entry.get())> 0:
        display_enc =“”.join(entry.get()]中ch的[enc.get(ch,ch)))
        entry.delete(0,tkinter.END)
        new_message.config(背景= window.cget( 'BG'))
        new_message.config(文本= STR(display_enc))
        new_message.pack()
        encrypted_frame.pack()

def back():
    new_message.pack_forget()
    entry.delete(0,tkinter.END)
    first_frame.pack()
    encrypt_frame.pack_forget()
    encrypted_frame.pack_forget()
    change_frame.pack_forget()
    changed_frame.pack_forget()

def change_code():
    全球change_frame
    encrypt_entry.focus_set()
    encrypt_entry.pack()
    change_confirm.pack()
    back_button4.pack()
    change_frame.pack()
    first_frame.pack_forget()

first_frame = tkinter.Frame(窗口)
encrypt_button = ttk.Button(first_frame,text =“Encrypt”,width = 20,command = encrypt)
change_code = ttk.Button(first_frame,text =“更改代码”,width = 20,command = change_code)
encrypt_button.pack()
change_code.pack()
first_frame.pack()

back_button = ttk.Button(encrypt_frame,text =“Back”,width = 20,command = back)
back_button4 = ttk.Button(change_frame,text =“Back”,width = 20,command = back)

encrypt_confirm = ttk.Button(encrypt_frame,text =“确认”,宽度= 20,命令= display_encrypt)

new_message = tkinter.Label(encrypted_frame,text =“”,font =('Helvetica',10))

change_confirm = ttk.Button(change_frame,text =“确认”,宽度= 20,命令= code_change)

window.mainloop()

我的问题是声明 encryption_code global在我的代码中不起作用。不工作的函数是 def display_encrypt and def display decrypt (the encryption_code 保留为LFWOAYUISVKMNXPBDCRJTQEGHZ,即使用户已经改变了它)而在其他函数中,它的工作原理是完美的。

例如,您将加密代码更改为QWERTYUIOPASDFGHJKLZXCVBNM,然后进行加密并键入ABC。它应该加密到QWE,而是加密到LFW(原始加密代码)

回答(1)

  • 1楼
  • 在你的代码中至少有两个bug,或许更多。

    首先,就像在你之前的问题中一样,你的第一个if语句在 code_change 中是不正确的。至少有两个解决这个问题的答案。我建议你回去重新阅读你在这里接受的答案: https://stackoverflow.com/a/33411642/7432 .

    第二个问题是你没有使用<notranslate >执行加密,您正在使用当用户输入另一个加密字符串(同样,enc用于描述)。 dec。因为你从不改变它们,所以你加密的每一个字符串都使用原始的加密字符串。时,你从不改变这些变量。解决方案是更新 encrypton_code

    code_change enc and dec in def code_change():     全球安全,十二月     ...     如果len(加密)== 26:         ...         enc = dict(zip(letters,encryption_code))         dec = dict(zip(encryption_code,letters))         ...:

    def code_change():
        global enc, dec
        ...
        if len(encryptget) == 26:
            ...
            enc = dict(zip(letters,encryption_code))
            dec = dict(zip(encryption_code, letters))
            ...
    

相关阅读: