【发布时间】:2015-11-15 19:50:58
【问题描述】:
我有一个由 26 个字母组成的加密代码,以及一个允许用户根据需要更改它的选项。在多次尝试我的程序后,我遇到了一个错误,一个合乎逻辑的错误。用户可以更改代码,但也可以输入相同的字符 26 次或至少 1 个字符以上,这可能会破坏我的整个程序。有没有办法只允许用户只输入每个字母一次?到目前为止,这是我所拥有的:
import tkinter
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
encryption_code = 'LFWOAYUISVKMNXPBDCRJTQEGHZ'
letters += letters.lower()
encryption_code += encryption_code.lower()
window = tkinter.Tk()
encrypt_entry = tkinter.Entry(window)
encrypt_entry.pack()
def code_change(event):
global encrypt_entry
global encryption_code
encryptget = encrypt_entry.get()
if len(encryptget) == 26:
print("You have changed the encryption code")
encryption_code = encryptget
encryption_code += encryption_code.lower()
enc = dict(zip(letters, encryption_code))
dec = dict(zip(encryption_code, letters))
elif len(encryptget) < 26 or len(encryptget) > 26:
print("Please enter 26 characters")
encrypt_entry.delete(0, tkinter.END)
window.bind('<Return>', code_change)
编辑
我尝试了以下方法,但现在如果我尝试输入字母表或encryption_code,elif 语句什么也不做。
import tkinter
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
encryption_code = 'LFWOAYUISVKMNXPBDCRJTQEGHZ'
letters += letters.lower()
encryption_code += encryption_code.lower()
window = tkinter.Tk()
encrypt_entry = tkinter.Entry(window)
encrypt_entry.pack()
def code_change(event):
global encrypt_entry
global encryption_code
encryptget = encrypt_entry.get()
if len(set(encryptget)) == 26 and encryptget != encryption_code and encryptget != letters:
print("You have changed the encryption code")
encryption_code = encryptget
encryption_code += encryption_code.lower()
enc = dict(zip(letters, encryption_code))
dec = dict(zip(encryption_code, letters))
elif len(set(encryptget)) != 26 and encryptget == encryption_code and encryptget == letters:
print("Please enter each character exactly once")
encrypt_entry.delete(0, tkinter.END)
window.bind('<Return>', code_change)
【问题讨论】:
-
如果你想让所有26个字符都是唯一的,那么
len(set(encryptget)) == 26会发现;len(set('abc')) == 3但len(set('aaa')) == 1. -
那么仅仅使用
set()函数,它就允许26个唯一字符吗?另外,我不希望用户只能输入字母表——这会破坏加密部分——我已经对其进行了排序。 -
一个集合只能包含unique元素,所以如果字符串有26个字符但有一个字符重复,那么集合会更短。
-
我已经尝试了您的建议,当我输入字母表或加密代码时,
elif语句似乎不起作用。 -
在
elif中你需要or代替and。但你不需要elif你可以使用else:
标签: python tkinter get tkinter-entry