Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python code de César

    26 novembre 2019 à 11:33:15

    Bonjour, je débute le python et ai voulu m'entrainer à travers le code de césar. J'ai crée un code pour crypter et décrypter des messages, et j'aurait voulu avoir quelque conseils sur la façon de le simplifier car je ne doute pas qu'il y'ai un moyen plus simple de faire ce que j'ai fait. Merci d'avance pour les réponses ;)

    def breakAnalyse():
        code = str(input("Rentrez un texte à décrypter : "))
        tabTempo = [code]
        tabLettre = [i for i in tabTempo[0]]
        listeCaraProba = ["e","a","i","s","n","r","t","o","l","u","d","c","m","p","é","g","b","v","h","f","q","y","x","j","è","à","k","w","z","ê","ç","ô","â","î","û","ù","ï","ü","ë","ö","í"]
        listeProba = [12.10,7.11,6.59,6.51,6.39,6.07,5.92,5.02,4.96,4.49,3.67,3.18,2.62,2.49,1.94,1.23,1.14,1.11,1.11,1.11,0.65,0.46,0.38,0.34,0.31,0.31,0.29,0.17,0.15,0.08,0.06,0.04,0.03,0.03,0.02,0.02,0.01,0.01,0.01,0.01,0.01]
        probaLettreTexte = []
        for lettreCaraProba in listeCaraProba:
            counter = 0
            for lettre in tabLettre:
                if lettre == lettreCaraProba:
                    counter += 1
            pourcentage = round((counter/len(tabLettre))*100,2)
            probaLettreTexte += [pourcentage]
           # print("Il y'a ",pourcentage, "% de ",i, "dans ce texte")
        print("\n\n\n",probaLettreTexte)  
        posBigOccu = probaLettreTexte.index(max(probaLettreTexte))
        decalage = ord(listeCaraProba[posBigOccu])-ord(listeCaraProba[0])
        unCesar(code, decalage)
        
        
    def unCesar(code, cle): #Fait la fct de dessus et la retransforme avec le code. Pour donner en facteur le phrase codé, suppr l. 31 et replace clair par code.
        tabTempo = [code]
        tabLettre = [i for i in tabTempo[0]]
        listeCara = [u for u in range(97,123)]
        listeCara += [u for u in range(65,91)]
        clair = " "
        for i in range(0,len(tabLettre)):
            valable = 0
            ordLettreTempo = ord(tabLettre[i]) - cle
            for c in range(len(listeCara)):
                if ord(tabLettre[i]) == listeCara[c]:
                    valable = 1
            if valable == 1:
                if ord(tabLettre[i])>=97 and ordLettreTempo>=97 and ordLettreTempo <=122: #mniuscule
                    clair += chr(ordLettreTempo)
                elif ord(tabLettre[i]) <= 90 and ordLettreTempo>=65 and ordLettreTempo<=90: #majuscule
                    clair += chr(ordLettreTempo)
                elif ordLettreTempo<97 and ordLettreTempo>90: 
                    clair += chr(122-(97-(ord(tabLettre[i])-cle)))
                else:
                    clair += chr(90-(65-(ord(tabLettre[i])-cle)))
            else:
                clair += tabLettre[i]
        print(clair, " \ncode césar : ", cle,"\n")
        
        
    def cesar():
        clair = str(input("Entrez un texte à traduire : "))
        cle = int(input("Entrez la cle : "))
        tabTempo = [clair]
        tabLettre = [i for i in tabTempo[0]]
        listeCara = [u for u in range(97,123)]
        listeCara += [u for u in range(65,91)]
        chiffre = " "
        if cle > 26:
            while cle > 26:
                cle = cle - 26
        for i in range(0,len(tabLettre)):
            valable = 0
            ordLettreTempo = ord(tabLettre[i]) + cle
            for c in range(len(listeCara)): #Verifie si fait partie de l'alphabet : si oui, code la lettre avc la cle, sinon, ne le code pas.
                if ord(tabLettre[i]) == listeCara[c]:
                    valable = 1
            if valable == 1:
                if ord(tabLettre[i])>=97 and ordLettreTempo<=122: #minu en minu
                    chiffre += chr(ordLettreTempo)
                elif ordLettreTempo>122 and ord(tabLettre[i])>=97: #minu qui est trop grande
                    chiffre += chr(97+(ordLettreTempo-122))
                elif ord(tabLettre[i])<=90 and ordLettreTempo>=90: #maju qui est trop grande
                    chiffre+= chr(65+(ordLettreTempo-90))
                elif ord(tabLettre[i])<=90 and ordLettreTempo<=90: #maju en maju
                    chiffre += chr(ordLettreTempo)
                else:
                    print("\nErreur pour la lettre ", tabLettre[i], "\n")
            else:
                chiffre += tabLettre[i]
        print("Le message codé est : ", chiffre)
        return chiffre
    

    (Je n'utilise pas les variables listeCaraProba et listeProba; je les avait crées mais n'ai pas su comment les utiliser)

    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2019 à 13:21:26

      Pourquoi aucune fonction n'est appelée ? Tu as testé un x avec code de 3 ? ton programme donne b

      -
      Edité par PascalOrtiz 26 novembre 2019 à 13:21:51

      • Partager sur Facebook
      • Partager sur Twitter

      Python code de César

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown