Quelques corrections en python (1)

Un test aura d’ailleurs lieu mardi 9 février dans l’esprit de ces questions, déjà préparées en distanciel.

On revient sur les exercices proposés en « codage »


Problème de codage

Avec un dictionnaire d’interversion :

from random import shuffle

def dico_aléatoire():
    """
    Renvoie un dictionnaire dont les clés sont
    les lettres de l'aplphabet dans l'ordre
    et les valeurs les lettres de l'alphabet mélangées
    """
    
    # A -> 65 ... Z -> 90
    clés = [chr(code_ascii) for code_ascii in range(65, 91)]
    #print(clés)
    # copie de la liste clés pour les valeurs
    valeurs = clés[:]
    #print(valeurs)
    # on mélange les valeurs
    shuffle(valeurs)
    #print(valeurs)
    
    # on construit et renvoie le dico
    return {clés[i] : valeurs[i] for i in range(26)}

    '''D = {}
    for i in range(26):
        D[clés[i]] = valeurs[i]
    return D'''

def codage(chaine, D):
    """Code la chaine avec le dico D"""
    # une chaine vide à compléter
    nouvelle = ""

    # on parcourt la chaine
    for carac in chaine:
        # une majuscule ?
        if 'A' <= carac <= 'Z':
            # je concatène le caractère codé
            nouvelle += D[carac]
        elif 'a' <= carac <= 'z':
            # une minuscule ? je passe à la majuscule
            majuscule = chr(ord(carac) - 32)
            # je code
            nouvelle_majuscule = D[majuscule]
            # je rajoute la minuscule
            minuscule = chr(ord(nouvelle_majuscule) + 32)
            # je concatène la minuscule codée
            nouvelle += minuscule
        else:
            # je garde les autres caractères
            nouvelle += carac
    # je renvoie la chaîne codée
    return nouvelle

def decodage(chaine, D):
    dico_inversé = {D[clé] : clé for clé in D} # ou D.keys()
    return codage(chaine, dico_inversé)

D = dico_aléatoire()
print(D)
chaine = "Vive le bac en controle continu OU PAS !"
chaine_codée = codage(chaine, D)
print(chaine)
print(chaine_codée)
retour_a_la_chaine = decodage(chaine_codée, D)
print(retour_a_la_chaine)

Qui donne :

{'A': 'N', 'B': 'X', 'C': 'H', 'D': 'K', 'E': 'Y', 'F': 'B', 'G': 'C', 'H': 'T', 'I': 'A', 'J': 'Z', 'K': 'R', 'L': 'E', 'M': 'U', 'N': 'W', 'O': 'D', 'P': 'M', 'Q': 'P', 'R': 'I', 'S': 'G', 'T': 'Q', 'U': 'L', 'V': 'J', 'W': 'F', 'X': 'O', 'Y': 'V', 'Z': 'S'}
Vive le bac en controle continu OU PAS !
Jajy ey xnh yw hdwqidey hdwqawl DL MNG !
Vive le bac en controle continu OU PAS !
>>> 

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.