Chiffrer un message
barnab22
-
quent217 Messages postés 424 Statut Membre -
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 :
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
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. -
Bonjour,
l'erreur est tout simplement la suivante : lorsque vous faitesmessage_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)