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 :

Question code ascii et exclusion


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 6
    Par défaut Question code ascii et exclusion
    Bonjour ,
    Je voudrais savoir comment exclure les chiffres de la transformation grâce au code césar . car la les chiffres sont modifiés ( a cause de l'ascii ) et c'est pas vraiment ça que je veux.
    merci de votre aide
    PS : si quelqu'un a une idée pour enlever la variable chiffre au début , je veux bien . J'ai essayé de bricoler quelque chose avec l'ascii et les chiffres mais c'était un échec ...
    Code : 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
    23
    24
    25
    26
    27
    28
     
    chiffre = '123456789'
     
    def position_ALPHABET(lettre):   #fonction permettant de savoir la position de la lettre dans l'alphabet
        code_ascii= ord(lettre)  #permet de trouver la position des lettres avec le code ascii
        indice = int(code_ascii) - 65 #permet de changer la position des lettres (A=0)
        return indice #retourner l'indice
     
     
    def fonction_cesar(message,decalage):   #fonction permettant de decaller les lettres suivant un décalage 
        resultat="" 
        for lettre in message : #chaque lettre va une par une dans la fonction
            indice = position_ALPHABET(lettre) #defini l'indice par la position de la lettre
            resultat = resultat + chr( 65 + (indice+decalage)%26) #rajoute 65 pour trouver la position dans le code ascii
            resultat = resultat + "" #assemble les lettres 
        return resultat #retourne le resusltat
     
    def chiffre(chiffre,message):
      chiffre =""
      for chiffre in message :
         #ne pas toucher au chiffre dans le message 
      return 
     
    ################programme principal##################
    message = input ("mot a coder en majuscules : ")   #demande a l'utilisteur le mot a coder
    decalage = input ("décalage souhaité : ")   #demande a l'utilistaeur le decallage
    resultat = fonction_cesar(message,int(decalage)) #permet d'assembler le résultat
    print (resultat)   #affiche le resultat a l'utilisateur

  2. #2
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Citation Envoyé par lIlIlIl Voir le message
    Bonjour ,
    Je voudrais savoir comment exclure les chiffres de la transformation grâce au code césar . car la les chiffres sont modifiés ( a cause de l'ascii ) et c'est pas vraiment ça que je veux.
    merci de votre aide
    PS : si quelqu'un a une idée pour enlever la variable chiffre au début , je veux bien . J'ai essayé de bricoler quelque chose avec l'ascii et les chiffres mais c'était un échec ...
    Salut,

    Déjà, très mauvaise idée de nommer une variable et une fonction avec le même nom !!!

    Pour les chiffres entiers tu peux ajouter une condition dans ta boucle For :


  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Suffit que ta fonction de chiffrement connaisse l'alphabet. Ensuite soit la lettre se trouve dans l'alphabet et tu la changes, soit elle ne s'y trouve pas et tu la changes pas.

    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
    #!/usr/bin/env python3
    # coding: utf-8
     
    def cesar(mot, alphabet="", clef=0):
    	def decal(l):
    		p=alphabet.find(l)
    		return alphabet[(p+clef)%len(alphabet)] if p != -1 else l
    	# decal()
     
    	return "".join(map(decal, mot))
    # cesar()
     
    alphabet="abcdefghijklmopqrstuvwxyz"
    mot="hello123hello"
     
    motK=cesar(mot, alphabet, 5)
    mot2=cesar(motK, alphabet, -5)
     
    print(mot, motK, mot2)
    assert mot == mot2

    Accessoirement si tu avais fait un tour à la page des exercices...
    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]

  4. #4
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    En complèment de la réponse de Sve@r, tu peux utiliser le module string pour éviter la saisie manuelle des lettres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import string
    >>> print(string.ascii_letters)
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    >>>
    Je t'invite à regarder les autres usages que l'on peut faire du module string.

  5. #5
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 6
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Merci j'ai commencé a regarder , mais ici l'exercice est d'utiliser le code ascii , mais effectivement c'est peut être plus pratique le module string !

    Citation Envoyé par hyakosm Voir le message
    merci effectivement c'était cela que je voulais faire mais je ne savais pas comment ... Oui et je vais modifier pour mettre upper et lower

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lIlIlIl Voir le message
    mais ici l'exercice est d'utiliser le code ascii
    C'est franchement con (un retour à l'âge de pierre de l'informatique quoi). Mais admettons. Dans ce cas, tu regardes si "a" <= lettre <= "z" or "A" <= lettre <= "Z".
    Ensuite faut gérer la boucle. Par exemple que donnera "y" décalé de 3 ? "b" si on considère qu'on reste en minuscules, ou "B" si on considère l'association min+maj comme un tout. Bref le donneur d'ordre n'a pas franchement réfléchi à tout ça. Bien plus pratique si on part d'un alphabet déjà construit (surtout que le module string contient effectivement déjà plein de groupes tout faits), alphabet qu'on peut ensuite faire évoluer facilement (rajouter les chiffres, la ponctuation, etc, et le code s'adapte tout seul)...
    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
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 6
    Par défaut Majuscule t
    autre question , programme different mais même fonctionnalité . pourquoi le résultat revient forcement en majuscules ? mon but serait que le programme ne touche pas a la "taille" des lettres , si c'est une lettre est en minuscule elle reste en minuscule dans le résultat et inversement ...
    merci pour votre aide
    Code : 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
    23
    24
    25
     
    alphabet='ABCDEFGHIJKLMNOPKRSTUVWXYZabcdefghijklmnopkrstuvwxyz'   #defini les lettres de l'alphabet
     
     
    def position_alphabet(lettre):   #fonction permettant de savoir la position de la lettre dans l'alphabet
        return alphabet.find(lettre)
     
     
    def fonction_cesar(message,decalage):   #fonction permettant de decaller les lettres suivant un décalage 
        resultat = "" #defini resultat
        for lettre in message : # pour les lettres dans le message
            if lettre in alphabet: #envoie les lettres 1 a 1 dans la fonction
                indice = position_alphabet(lettre) # defini l'indice
                resultat = resultat + alphabet [(indice+decalage)%26] #fait le modulo par 26 pour faire toute les lettres
            else : #si ce n'est pas des lettres il les supprime
                resultat = resultat + ""
     
        return resultat # retourne le resultat
     
    ################programme principal##################
     
    message = input ("mot a coder ( majuscules et minuscules ): ")   #demande a l'utilistaeur le mot a coder
    decalage = input ("décalage souhaité : ")   #demande a l'utilistaeur le decallage
    resultat = fonction_cesar(message,int(decalage))   #permet d'assembler le résultat
    print (resultat)   #affiche le resultat a l'utilisateur

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Je signale que le module string propose déjà une série de constantes de ce type.

    https://docs.python.org/3/library/st...ring-constants

  9. #9
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Je signale que le module string propose déjà une série de constantes de ce type.

    https://docs.python.org/3/library/st...ring-constants
    Ta réponse a 18 minutes de retard sur la mienne... C'était le temps de préparer un café?

  10. #10
    Membre régulier
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Août 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2019
    Messages : 14
    Par défaut
    Salut, si je comprends bien tu veux ignorer les chiffres. Dans ce cas, une condition suffit à vérifier que le caractère que tu veux décaler soit bien une lettre (indice entre 0 et 25). Tu peux forcer les lettres majuscules en entrée avec message.upper()

    Code : 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
    23
     
    def position_ALPHABET(lettre):   #fonction permettant de savoir la position de la lettre dans l'alphabet
        code_ascii= ord(lettre)  #permet de trouver la position des lettres avec le code ascii
        indice = int(code_ascii) - 65 #permet de changer la position des lettres (A=0)
        return indice #retourner l'indice
     
     
    def fonction_cesar(message,decalage):   #fonction permettant de decaller les lettres suivant un décalage 
        resultat="" 
        for lettre in message : #chaque lettre va une par une dans la fonction
            indice = position_ALPHABET(lettre) #defini l'indice par la position de la lettre
            if indice >= 0 and indice <= 25:
                resultat = resultat + chr( 65 + (indice+decalage)%26) #rajoute 65 pour trouver la position dans le code ascii
            else:
                resultat = resultat + chr(65 + indice)
        return resultat #retourne le resusltat
     
     
    ################programme principal##################
    message = input ("mot a coder : ")   #demande a l'utilisteur le mot a coder
    decalage = input ("décalage souhaité : ")   #demande a l'utilistaeur le decallage
    resultat = fonction_cesar(message.upper(), int(decalage)) #permet d'assembler le résultat
    print (resultat)   #affiche le resultat a l'utilisateur

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/10/2018, 15h23
  2. Code ASCII du symbole Euro
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/04/2007, 01h27
  3. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 13h04
  4. [mx2004]Convertir un code ASCII en une lettre
    Par caramel dans le forum Flash
    Réponses: 3
    Dernier message: 28/01/2004, 16h26
  5. [TP]Code ASCII.
    Par franck H dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 18/01/2004, 19h28

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