J'ai un code de cryptage composé de 26 lettres et une option qui permet à l'utilisateur de le changer s'il le souhaite. Après avoir essayé plusieurs fois mon programme, j'ai rencontré une erreur, logique. L'utilisateur peut changer le code, mais aussi, ils peuvent entrer le même personnage 26 fois ou au moins 1 caractère plus d'une fois ce qui pourrait ruiner tout mon programme. Est-il possible de permettre à l'utilisateur de taper chaque lettre une seule fois? Voici ce que j'ai jusqu'à présent:Comment autoriser la saisie de chaque caractère une fois?
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)
EDIT J'ai essayé si j'essayez ce qui suit, mais maintenant taper l'alphabet ou encryption_code
la déclaration elif
ne fait rien.
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)
Si vous voulez que tous les 26 caractères pour être uniques, puis 'len (set (encryptget)) == 26' DÉCOUVRIRA; 'len (set ('abc')) == 3' mais' len (set ('aaa')) == 1'. – jonrsharpe
Donc en utilisant simplement la fonction 'set()', cela permet d'avoir 26 caractères uniques? De plus, je ne veux pas que l'utilisateur puisse simplement taper l'alphabet - il ruine la partie de cryptage - et je l'ai trié. – Inkblot
un ensemble ne peut contenir que des éléments * uniques *, donc si la chaîne a 26 caractères mais que tout caractère est répété, l'ensemble sera plus court. – jonrsharpe