# crypte un texte avec le chiffre de Beaufort

def lettre(c):
    # retourne vrai si c est une lettre non accentuee
    car = ord(c.upper())
    return car>64 and car<91

def decalage(c,k):
    # decale une lettre majuscule. Les autres caracteres ne sont pas modifies
    car = ord(c.upper())
    if lettre(c):
        car += k
        while car>90:
            car -= 26
        while car<65:
            car += 26
        return chr(car)
    else:
        return ""

def beaufort(message,cle):
    # effectue le decalage en fonction de la cle sur les caracteres de message
    n = 0
    m = 0
    chiffre=''
    for c in message:
        if lettre(c):
            c = cle[n%len(cle)]
            k = ord(message[m].upper())-65
            chiffre += decalage(c,-k)
            n+=1
            m+=1
        else:
            chiffre += c
            m+=1
    return chiffre


# tests
cle = "JULIUS"
texte="Ave Caesar morituri te salutant"
texte_code = beaufort(texte,cle)
print(texte_code)
texte_decode = beaufort(texte_code,cle)
print(texte_decode)
