Chiffrer un message

barnab22 -  
quent217 Messages postés 424 Statut Membre -
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

  1. kloip
     
    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
    1. barnab22
       
      Merci beaucoup kloip !
      Mais je ne peux qu'utiliser
      len
      index
      et
      in
      comme fonctions et non join..
      0
  2. quent217 Messages postés 424 Statut Membre 348
     
    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