Maison > Article > développement back-end > Pourquoi mon chiffre Python César affiche-t-il uniquement le dernier caractère décalé ?
Implémentation du chiffre César en Python : le texte crypté ne s'affiche pas correctement
Ce code Python vise à implémenter le chiffre César, qui décale les caractères en fonction entrée de l'utilisateur. Cependant, le texte chiffré résultant affiche uniquement le dernier caractère décalé au lieu de la totalité de la chaîne chiffrée. Le code fourni est le suivant :
<code class="python">plainText = raw_input("What is your plaintext? ") shift = int(raw_input("What is your shift? ")) def caesar(plainText, shift): cipherText = "" for ch in plainText: if ch.isalpha(): stayInAlphabet = ord(ch) + shift if stayInAlphabet > ord('z'): stayInAlphabet -= 26 finalLetter = chr(stayInAlphabet) cipherText += finalLetter print "Your ciphertext is: ", cipherText return cipherText caesar(plainText, shift)</code>
Analyse
Le problème réside dans la boucle qui traite chaque caractère du texte brut. Au lieu d'ajouter tous les caractères décalés à la variable cipherText, le code la met à jour uniquement avec le dernier caractère décalé. Pour corriger cela, la variable cipherText d'origine doit être déclarée avant la boucle de traitement des caractères.
Implémentation Python
Une implémentation optimisée du chiffrement César peut être obtenue à l'aide des méthodes de manipulation de chaînes de Python. :
<code class="python">def caesar(plaintext, shift): alphabet = string.ascii_lowercase shifted_alphabet = alphabet[shift:] + alphabet[:shift] table = string.maketrans(alphabet, shifted_alphabet) return plaintext.translate(table)</code>
En utilisant string.maketrans() et str.translate(), l'intégralité de la chaîne de texte en clair peut être chiffrée en une seule opération, ce qui améliore les performances et la lisibilité du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!