Menu

Chiffrer un message

- - Dernière réponse : quent217
Messages postés
262
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
16 avril 2019
- 16 avril 2019 à 22:57
Bonjour,

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
Afficher la suite 

Votre réponse

2 réponses

0
Merci
Bonsoir,

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.
Merci beaucoup kloip !
Mais je ne peux qu'utiliser
len
index
et
in
comme fonctions et non join..
Commenter la réponse de kloip
Messages postés
262
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
16 avril 2019
81
0
Merci
Bonjour,
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)
Commenter la réponse de quent217