Chiffrer un message

Fermé
barnab22 - 15 avril 2019 à 16:41
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 - 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

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.

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.
0
Merci beaucoup kloip !
Mais je ne peux qu'utiliser
len
index
et
in
comme fonctions et non join..
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
16 avril 2019 à 22:57
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)
0