IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Crypter/Decrypter en CESAR avec des accents en PYTHON


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 165
    Points : 0
    Points
    0
    Par défaut Crypter/Decrypter en CESAR avec des accents en PYTHON
    Bonjour,

    Je dois réaliser un code où j'ai un message de départ avec des accents (àâäÀÂÄéèêëÉÈÊËîïÎÏôöÔÖùûüÙÛÜ)...

    Le problème est que je crypte ou décrypte le code par décalage et j'ai un problème lorsque je converti un accent en une minuscule (sans accent), la lettre suivante n'est pas convertie, un problème d'incrémentation en fait :

    Cas juste avec les a accentués...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    message = 'àâäÀÂÄ YRXV GHYULHC PDLQWHQDQW HWUH SUHW SRXU OH SURFKDLQ FRQWUROH...'
    accent = 'àâäÀÂÄéèêëÉÈÊËîïÎÏôöÔÖùûüÙÛÜ'
    minuscule = 'abcdefghijklmnopqrstuvwxyz'
    longueur = len(message)
    i = 0
    messageC = ''
    while i < longueur:
        if message[i]==accent[0] or message[i]==accent[1] or message[i]==accent[2] or message[i]==accent[3] or message[i]==accent[4] or message[i]==accent[5]:
            messageC = messageC + minuscule[0]
            i = i+1
        messageC = messageC + message[i]
        i = i+1
     
    #code donné par le prof, que je ne comprend pas entièrement d'ailleurs...    
    chiffre = ''
    def decalage(caractere,valeur):return(chr(((ord(caractere)-ord('a')+valeur)%26)+ord('a')))
    for c in messageC:
       if c.isalpha():
            chiffre = chiffre + decalage(c,3)
       else:
            chiffre = chiffre + c
    print(chiffre)

    Merci de votre lecture.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par pito2901 Voir le message
    if message[i]==accent[0] or message[i]==accent[1] or message[i]==accent[2] or message[i]==accent[3] or message[i]==accent[4] or message[i]==accent[5]:
    T'es sérieux là ? Et s'il y avait 500 possibilités tu les aurais toutes énumérées ???
    Tu peux pas mettre un flag à faux et le mettre à vrai si message[i] == accent[j] avec j variant entre 0 et 5 (algo général) ou plus simplement écrire if message[i] in accent[0:6] (possibilité Python) ???


    Citation Envoyé par pito2901 Voir le message
    Le problème est que je crypte ou décrypte le code par décalage et j'ai un problème lorsque je converti un accent en une minuscule (sans accent), la lettre suivante n'est pas convertie, un problème d'incrémentation en fait :

    Cas juste avec les a accentués...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while i < longueur:
        if message[i]==accent[0] or message[i]==accent[1] or message[i]==accent[2] or message[i]==accent[3] or message[i]==accent[4] or message[i]==accent[5]:
            messageC = messageC + minuscule[0]
            i = i+1
        messageC = messageC + message[i]
        i = i+1
    Ben oui. C'est ce qui arrive quand on répète les mêmes instructions sans réfléchir !!! Ton i s'incrémente deux fois !!!

    Citation Envoyé par pito2901 Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #code donné par le prof, que je ne comprend pas entièrement d'ailleurs...    
    chiffre = ''
    def decalage(caractere,valeur):return(chr(((ord(caractere)-ord('a')+valeur)%26)+ord('a')))
    for c in messageC:
       if c.isalpha():
            chiffre = chiffre + decalage(c,3)
       else:
            chiffre = chiffre + c
    print(chiffre)
    Le prof utilise la valeur ascii du caractère à laquelle il enlève celle de 'a'. Ca donne pour chaque lettre de 'a' à 'z' son rang dans l'alphabet. Il lui ajoute une valeur pour décaler et avec un modulo 26 ça redonne un nombre entre 0 et 26.
    Ensuite il ne converti que les caractères "alphabétiques". Ceux qui ne rentrent pas dans la liste sont rajoutés tels quels au message.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 165
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    T'es sérieux là ? Et s'il y avait 500 possibilités tu les aurais toutes énumérées ???
    Tu peux pas mettre un flag à faux et le mettre à vrai si message[i] == accent[j] avec j variant entre 0 et 5 (algo général) ou plus simplement écrire if message[i] in accent[0:6] (possibilité Python) ???
    Pas besoin d'être si agressif ! J'ai quelques notions de programmation dans d'autres domaines de programmation, je commence le python que depuis 2 mois, donc restons calme.

    Merci pour ce bout de code, mais comment faut-il le placer et l'adapter au programme existant ? Car comme je l'ai dit, je suis débutant et n'ai aucune idée de comment faire ça...

    Citation Envoyé par Sve@r Voir le message
    Ben oui. C'est ce qui arrive quand on répète les mêmes instructions sans réfléchir !!! Ton i s'incrémente deux fois !!!
    Oui j'avais remarqué, mais je n'arrive pas a transformer mon programme de façon à ce qu'il fasse lettre par lettre (il faudrait faire un retour direct au while après le if validé...).

    Citation Envoyé par Sve@r Voir le message
    Le prof utilise la valeur ascii du caractère à laquelle il enlève celle de 'a'. Ca donne pour chaque lettre de 'a' à 'z' son rang dans l'alphabet. Il lui ajoute une valeur pour décaler et avec un modulo 26 ça redonne un nombre entre 0 et 26.
    Ensuite il ne converti que les caractères "alphabétiques". Ceux qui ne rentrent pas dans la liste sont rajoutés tels quels au message.
    Merci, à présent je comprend sa fonction décalage...

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pito2901 Voir le message
    Pas besoin d'être si agressif ! J'ai quelques notions de programmation dans d'autres domaines de programmation, je commence le python que depuis 2 mois, donc restons calme.
    La façon de détecter via un flag si un élément particulier est présent dans un ensemble d'éléments c'est même pas une question de Python, c'est juste une question de réflexion !!! Python offre juste en plus l'opérateur in qui le fait d'un coup, rien de plus.

    Citation Envoyé par pito2901 Voir le message
    Oui j'avais remarqué, mais je n'arrive pas a transformer mon programme de façon à ce qu'il fasse lettre par lettre (il faudrait faire un retour direct au while après le if validé...).
    Ben tu fais 2 cas: quand la lettre est accentuée et quand elle ne l'est pas (c'est ce que le prof a fait d'ailleurs...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Hello, je m'invite dans la discussion.

    Pour encoder une chaine de caractère avec accent, afin d'obtenir une chaine de caractère sans accent (mode ASCII donc), il faut regarder du coté de unicodedata, avec un "unicodedata.normalize(<form>,<str>).encode('ASCII', 'ignore')". ça simplifie partiellement le taf quand meme
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Oui mais là il s'agit typiquement d'un exo de base permettant de manipuler les boucles, le traitement des chaines et des caractères avec quelques alternatives donc t'es peut-être un peu trop haut non ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Oups, j'avais pas compris. Bon, au moins il sait comment faire mieux que le prof maintenant
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

Discussions similaires

  1. Comparaison avec des accents
    Par Zugg dans le forum Paradox
    Réponses: 8
    Dernier message: 26/09/2007, 10h33
  2. Export de table avec des accents
    Par AODRENN dans le forum Excel
    Réponses: 1
    Dernier message: 24/05/2007, 11h57
  3. Export de table avec des accents
    Par AODRENN dans le forum Outils
    Réponses: 3
    Dernier message: 16/05/2007, 21h21
  4. Mauvais tri des String avec des accents
    Par lbreuillard dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/09/2005, 12h21
  5. Recherche avec des accents!?
    Par mona dans le forum Access
    Réponses: 3
    Dernier message: 14/06/2005, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo