Décodage de César : épilogue !

ane__csar_250

Alea jacta est !

On finit le TP de la veille et on aboutit.

Le code ci-dessous, en cliquant sur « lire la suite », établi ensemble, nous a permis de décodé le texte secret 🙂

C’est un extrait de cette page Wikipedia 😉

def lit_et_envoie(nom):
    with open(nom,'r') as fichier:
        texte = fichier.read()
        
    fichier.close()
    return texte

def decode(texte, decalage):
    """Renvoie une chaine de caractères décalés
 
        Attend une chaîne de caractères non accentués
        éventuellement vide : texte
 
        Un entier positif entre 0 et 25 : decalage
         
        Renvoie une chaîne de la même longueur avec des caractères
        décalés de ... decalage, et ramenés dans l'alphabet
        en revenant de 26si on dépasse z ou Z
 
        Garde les caractères non alphabétiques
    """
         
    # Une chaîne vide à compléter au fur et à mesure
    resultat = ""
 
    # On parcourt la chaîne texte
    for lettre in texte :
 
        # décalage -> new est un code ASCII
        new = ord(lettre) + decalage
         
        if 65 <= ord(lettre)  90 :               # dépassement du z ?
                new -= 26
            resultat += chr(new)        # on rajoute le caractère décalé
        elif 97 <= ord(lettre)  122 :              # dépassement du Z ?
                new -= 26
            resultat += chr(new)        # on rajoute le caractère décalé
        else :
            resultat += lettre   # on rajoute le caractère non décalé
 
    # On renvoie la nouvelle chaîne
    return resultat
# Des tests !
assert decode("", 5) == ""
assert decode("Ac Z!", 5) == "Fh E!"

freq = {chr(i) : 0 for i in range(65, 91)}
contenu = lit_et_envoie("texte_secret.txt")
#print(contenu)

for lettre in contenu.upper():
    if 'A' <= lettre <= 'Z':
        freq[lettre] += 1

# print(freq)

# recherche de la plus grande valeur
cle_du_max = 'A'
for cle in freq:
    if freq[cle] > freq[cle_du_max]:
        cle_du_max = cle

# print(cle_du_max)

# calcul du decalage
if cle_du_max > 'E':
    decalage = ord('E') + 26 - ord(cle_du_max)
else:
    decalage = ord('E') - ord(cle_du_max)

# variante Marchant
# (decalage = ord('E') + 26 - ord(cle_du_max)) % 26
# print(decalage)

# affichage
print(decode(contenu, decalage))

N'hésitez-pas à poser une question, ou faire avancer le schmilblick

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.