cesar.py

Created by ph-moutou

Created on April 23, 2018

991 Bytes

La fonction encode permet de coder/décoder un message t avec un code César de clé c. La fonction analyse procède à une analyse des fréquences de chaque lettre de l’alphabet dans le message t; elle renvoie la liste des lettres dans l’ordre des fréquences décroissantes. On peut ainsi afficher le message décodé selon la clé qui s’en déduit pour les principales hypothèses concernant le codage du E.


def encode(t,c):
    tt=''    
    for lettre in t :
        lettre=lettre.upper()
        if 64<ord(lettre)<91:
            tt+=chr((ord(lettre)-65-c)%26+65)
        if 47<ord(lettre)<58:
            tt+=chr((ord(lettre)-48-c)%10+48)
        for e in range(len(tt)-len(tt)%5,0,-5):
            tt=tt[:e]+' '+tt[e+1:]
    return tt

def analyse(t):
    alpha,beta=26*[0],26*[0]
    for lettre in t :
        if 64<ord(lettre)<91:
            alpha[ord(lettre)-65]+=1
    #print('alpha',alpha)
    val=[]
    for e in alpha:
        if e not in val and e!=0 : val.append(e)
    val.sort(reverse=True)
    j=0
    for n in val:
        start=0
        for i in range(alpha.count(n)):
            beta[j]=alpha.index(n,start)+1
            start=beta[j]
            j+=1
    #print('beta',beta)
    return beta

texte='XQEBX MUEMZ FQDUQ EXQEB XGEOA GDFQE EAZFX QEYQU XXQGD QE'
Ordre=analyse(texte)
for i in range(3):
    print('clef={}'.format(Ordre[i]-5),encode(texte,Ordre[i]-5))