Maison  >  Article  >  développement back-end  >  Pourquoi mon chiffre Python César affiche-t-il uniquement le dernier caractère décalé ?

Pourquoi mon chiffre Python César affiche-t-il uniquement le dernier caractère décalé ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 09:37:27653parcourir

Why is my Python Caesar Cipher only displaying the last shifted character?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn