Chiffrer un message
barnab22
-
quent217 Messages postés 420 Date d'inscription Statut Membre Dernière intervention -
quent217 Messages postés 420 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je voudrais faire un code qui me permettrai de chiffrer un mot à partir d'un alphabet de substitution que j'ai appelé y :
Le problème apparait à partir de la ligne 18. En effet, je devrais obtenir "zeuwvyda" comme mot codé mais j'obtiens "da" à la place, soit les deux dernières lettres... Je sais que c'est un truc bête mais je ne trouve pas mon erreur
Auriez-vous une idée ?
Je voudrais faire un code qui me permettrai de chiffrer un mot à partir d'un alphabet de substitution que j'ai appelé y :
y=["w","x","y","z","a","b","c","d","e","r","s","t","u","v","f","g","h","i","j","k","l","m","n","o","p","q"] #alphabet de substitution A=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"] #alphabet 'normal' mot="dimanche" #mot que je veux coder L=[] for k in range(len(mot)-1): L.append(mot[k:k+1]) #slicing de mot L.append(mot[len(mot)-1:]) for k in range(len(A)): for i in range(len(L)): if L[i]==A[k]: L[i]=k for k in range(len(y)): for i in range(len(L)): #on remplace les lettres par celles de l'alphabet de substitution (grâce aux indices) if L[i]== k: L[i]=y[k] c=len(L)-1 for k in range(c): message_chiffre = L[k]+L[k+1] print(message_chiffre)
Le problème apparait à partir de la ligne 18. En effet, je devrais obtenir "zeuwvyda" comme mot codé mais j'obtiens "da" à la place, soit les deux dernières lettres... Je sais que c'est un truc bête mais je ne trouve pas mon erreur
Auriez-vous une idée ?
Configuration: Windows / Firefox 60.0
A voir également:
- Chiffrer un message
- Comment recuperer un message supprimé sur whatsapp - Guide
- Epingler un message whatsapp - Accueil - Messagerie instantanée
- Message supprimé whatsapp - Guide
- Message absence thunderbird - Guide
- Message du pere noel gratuit whatsapp - Accueil - Messagerie instantanée
2 réponses
Bonsoir,
Il y a beaucoup trop de boucles pour faire cela.
Ton code peut déjà largement être amélioré comme ceci.
On peut réduire encore plus ce code.
Il y a beaucoup trop de boucles pour faire cela.
Ton code peut déjà largement être amélioré comme ceci.
L=[] for l in mot: for i in range(len(A)): if l == A[i]: L.append(y[i]) message_chiffre = ''.join(L) print(message_chiffre)
On peut réduire encore plus ce code.
Bonjour,
l'erreur est tout simplement la suivante : lorsque vous faites
Pour faire ce que vous voulez, il faut initialiser message_chiffre avec une chaine vide puis lui ajouter les caractères au fur et à mesure. Ca donne :
Pour compléter la réponse de kloip, vous pouvez éviter d'utiliser join en concaténant les caractères de la même manière. Ca donne :
l'erreur est tout simplement la suivante : lorsque vous faites
message_chiffre = L[k]+L[k+1], vous remplacez à chaque fois message_chiffre par les 2 caractères à l'indice k. Pour la dernière valeur de k, ça correspond aux 2 derniers caractères.
Pour faire ce que vous voulez, il faut initialiser message_chiffre avec une chaine vide puis lui ajouter les caractères au fur et à mesure. Ca donne :
c=len(L) message_chiffre = "" for k in range(c): message_chiffre += L[k]
Pour compléter la réponse de kloip, vous pouvez éviter d'utiliser join en concaténant les caractères de la même manière. Ca donne :
message_chiffre = "" for l in mot: for i in range(len(A)): if l == A[i]: message_chiffre += y[i] print(message_chiffre)
Mais je ne peux qu'utiliser et comme fonctions et non join..