Le concept ici est l'encodage et le décodage à l'aide de la structure de données du dictionnaire. quelqu'un peut-il m'aider à faire cela encore mieux et plus simplement? ou Existe-t-il des fonctions intégrées pour effectuer l'encodage et le décodage à l'aide de la structure de données du dictionnaire?
qwerty_encrypt={'a':'q','b':'w','c':'e','d':'r','e':'t','f':'y','g':'u','h':'i','i':'o','j':'p','k':'a','l':'s','m':'d','n':'f','o':'g','p':'h','q':'j','r':'k','s':'l','t':'z','u':'x','v':'c','w':'v','x':'b','y':'n','z':'m','1':'9','2':'8','3':'7','4':'6','5':'5','6':'4','7':'3','8':'2','9':'1','0':'0'} msg=input('enter yuor msg:').lower() #encrypt_func def enigma_encrypt(msg): a=list(msg.split(' ')) li=[] for i in a: li.append(list(i)) li2=[] li4=[] for i,j in enumerate(li): li3=[] for k,l in enumerate(j): li3.append(qwerty_encrypt[l]) li2.append(li3) for m in li2: li4.append(''.join(m)) after_encrypt=(' '.join(li4)) return after_encrypt def enigma_decrypt(msg): a=list(msg.split(' ')) li=[] for i in a: li.append(list(i)) li2=[] li4=[] for i,j in enumerate(li): li3=[] for k,l in enumerate(j): for n in qwerty_encrypt: if qwerty_encrypt[n]==l: li3.append(n) li2.append(li3) for m in li2: li4.append(''.join(m)) after_encrypt=(' '.join(li4)) return after_encrypt print('After encrytion:',enigma_encrypt(msg),'\nAfter decryption:',enigma_decrypt(enigma_encrypt(msg)))
3 Réponses :
Vous pouvez utiliser str.translate en conjonction avec str.maketrans :
qwerty_encrypt = {'a': 'q', 'b': 'w', 'c': 'e', 'd': 'r', 'e': 't', 'f': 'y', 'g': 'u', 'h': 'i', 'i': 'o', 'j': 'p', 'k': 'a', 'l': 's', 'm': 'd', 'n': 'f', 'o': 'g', 'p': 'h', 'q': 'j', 'r': 'k', 's': 'l', 't': 'z', 'u': 'x', 'v': 'c', 'w': 'v', 'x': 'b', 'y': 'n', 'z': 'm', '1': '9', '2': '8', '3': '7', '4': '6', '5': '5', '6': '4', '7': '3', '8': '2', '9': '1', '0': '0'} qwerty_decrypt = {value: key for key, value in qwerty_encrypt.items()} assert len(qwerty_decrypt) == len(qwerty_encrypt) table_encrypt = str.maketrans(qwerty_encrypt) table_decrypt = str.maketrans(qwerty_decrypt) msg = 'Hello Stack Overflow'.lower() print('After encryption:', msg.translate(table_encrypt)) print('After decryption:', msg.translate(table_encrypt).translate(table_decrypt))
Même si le code @myrmica était simple et facile à comprendre,
Mais voici mon essai de la même manière avec moins de listes. J'espère que c'est ce à quoi vous vous attendiez.
Output: After encryption: itssg lzqea gctkysgv After decryption: hello stack overflow
qwerty_encrypt={'a':'q','b':'w','c':'e','d':'r','e':'t','f':'y','g':'u','h':'i','i':'o','j':'p','k':'a','l':'s','m':'d','n':'f','o':'g','p':'h','q':'j','r':'k','s':'l','t':'z','u':'x','v':'c','w':'v','x':'b','y':'n','z':'m','1':'9','2':'8','3':'7','4':'6','5':'5','6':'4','7':'3','8':'2','9':'1','0':'0'} msg=input('enter yuor msg:').lower() print (msg) def enigma_encrypt(msg): enc=[] for i in msg: if i!=' ': enc.append(qwerty_encrypt[i]) elif i==' ': enc.append(" ") return "".join(enc) def enigma_decrypt(msg): ms=enigma_encrypt(msg) dec=[] for j in ms: for u,v in qwerty_encrypt.items(): if j!=' ' and v==j: dec.append(u) elif j==' ': dec.append(" ") break return "".join(dec) print('After encrytion:',enigma_encrypt(msg)+"\n"+'After decrytion:',enigma_decrypt(msg))
J'ai changé le qwerty_encrypt pour ajouter null comme espace vide. Cela va comme ça:
encrypt = enigma_encrypt('Welcome Shenbga') print(encrypt) vtsegdt litfwuq dencrypt = enigma_decrypt('vtsegdt litfwuq') print(dencrypt) welcome shenbga
Voici ce qui se passe:
qwerty_encrypt={'a':'q','b':'w','c':'e','d':'r','e':'t','f':'y','g':'u','h':'i','i':'o','j':'p','k':'a','l':'s','m':'d','n':'f','o':'g','p':'h','q':'j','r':'k','s':'l','t':'z','u':'x','v':'c','w':'v','x':'b','y':'n','z':'m','1':'9','2':'8','3':'7','4':'6','5':'5','6':'4','7':'3','8':'2','9':'1',' ':' '} #encoding def enigma_encrypt(msg): encode = [] msg = msg.lower() for words in msg: chars = [char for char in words] for k,v in qwerty_encrypt.items(): if chars[0] == k:#extract char from single list encode.append(v) return ''.join(encode) #decoding def enigma_decrypt(encrypted): decode = [] for code in encrypted: chars = [char for char in code] for k,v in qwerty_encrypt.items(): if chars[0] == v: #extract char from single list decode.append(k) return ''.join(decode)
Il ne gère pas les espaces dans la phrase. @powerPixie
@SivaShanmugam J'ai vérifié à nouveau. Il est nécessaire d'utiliser le qwerty_encrypt que j'ai édité, avec les deux espaces vides que j'ai ajoutés à la fin. Vous pouvez voir l'impression du code fonctionner.
Pourquoi utiliser autant de listes? msg serait une chaîne itérable. Je ferais aussi un dict de décryptage. puis à peu près une boucle à deux lignes pour les sorties de votre message déchiffré et message chiffré. aussi {"": ""} est un dict valide