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 :

décimale à hexadécimale et reciproquement


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut décimale à hexadécimale et reciproquement
    bonjour,
    j'ai pour objectif de faire une def qui convertit l'hexa en déci et inversement, pour contrainte j'ai pas le droit d'utiliser ce qui concerne les chaînes de caractères, les listes et des slices.

    j'avais pour idée, de faire un truc basique comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def hexa_déci(hexa):
        b2=""
        d1 = hexa
        d = int(d1)
        while d != 0 :
           r=d%2 
           b2= str(r)+b2 
           d=d//2
    et de faire genre un *10 si la décimale contenait un A, mais j'y arrive pas, un peu d'aide serait la bienvenue, merci

    sachant que même str on na pas le droit de l'utiliser...

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Pour poster ton code utilise la balise [CODE]...

    Et là ce code c'est pour convertir un nombre hexadécimale en un nombre décimal, c'est ça ?

    Avant de coder en Python comment tu ferais pour faire cette conversion ? Quel algorithme tu utiliserais ?

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Ah oui une autre question le nombre hexadécimale contient un seul chiffre ou bien il peut en contenir plusieurs ?

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Un seul nombre (10 ou 100 ou 1000...)
    Un algorithme? Le python, si j'ai bie compris.

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par TheEmperor_ Voir le message
    Un seul nombre (10 ou 100 ou 1000...)
    Euh non je demande le nombre de chiffres du nombre hexadécimal à convertir en décimal...

    Exemples à un chiffre : A, B, C, D, E, F, 0, 1, 2, 3...

    Exemples à plusieurs chiffres ce serait par exemple : AB,13, FFFA...


    Citation Envoyé par TheEmperor_ Voir le message
    Un algorithme? Le python, si j'ai bie compris.
    En fait je voulais dire : tu ferrais comment à la main avec un papier et un crayon ou mentalement de tête, quelle procédure tu effectuerais...

  6. #6
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Euh non je demande le nombre de chiffres du nombre hexadécimal à convertir en décimal...

    Exemples à un chiffre : A, B, C, D, E, F, 0, 1, 2, 3...

    Exemples à plusieurs chiffres ce serait par exemple : AB,13, FFFA...
    Bon de toute façon il faut commencer par faire un bout de code qui converti un nombre à un chiffre et éventuellement l'utiliser ensuite pour convertir des nombres à plusieurs chiffres...

  7. #7
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    j'ai pas le droit d'utiliser ce qui concerne les chaînes de caractères, les listes et des slices
    sans ça je vois mal comment vous pourriez avoir de l'héxa.
    désolé de faire mon chiant mon hex() et int() existent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> hex(1234567890)
    '0x499602d2'
    >>> int("499602d2", base=16)
    1234567890

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par flapili Voir le message
    sans ça je vois mal comment vous pourriez avoir de l'héxa.
    désolé de faire mon chiant mon hex() et int() existent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> hex(1234567890)
    '0x499602d2'
    >>> int("499602d2", base=16)
    1234567890
    Ah oui c'est vrai lol...

    Mais évidement c'est un exo pour s'entrainer...

    J'ai voulu le refaire autrement (pour un nombre à un seul chiffre) :

    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
    def hexa_déci1(hexa):
        hexa = hexa.lower()
     
        if "0" <= hexa <= "9":
            offset = 48
        elif "a" <= hexa <= "f":
            offset = 87
        else:
            print("Erreur...")
            return None
     
        res = ord(hexa)-offset
        print("le nombre décimal correspondant à %s est %d" % (hexa, res))
        return res

    Mais pour l'exo peut-être qu'ils doivent faire une série de conditions (if, elif et else) pour chaque lettre allant de a à f et pour les chiffres 0 à 9 une seule condition suffit...


    PS : Il n'y a pas de switch en Python ?

  9. #9
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    c'est assez simple mathématiquement parlant, il suffit de se rappeler que par exemple 12310 c'est 1x102 + 2x101 + 3x100, on peux généraliser pour toutes bases, ainsi abc16 est 10x162 + 11x161 + 12x160

    PS : Il n'y a pas de switch en Python ?
    non (et heureusement selon moi) PEP3103

  10. #10
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par flapili Voir le message
    non (et heureusement selon moi) PEP3103
    Merci.

  11. #11
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai voulu le refaire autrement (pour un nombre à un seul chiffre) :

    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
    def hexa_déci1(hexa):
        hexa = hexa.lower()
     
        if "0" <= hexa <= "9":
            offset = 48
        elif "a" <= hexa <= "f":
            offset = 87
        else:
            print("Erreur...")
            return None
     
        res = ord(hexa)-offset
        print("le nombre décimal correspondant à %s est %d" % (hexa, res))
        return res


    alors, c'est bien, j'ai mis 5 bonne minute a comprendre chaque instruction mais, excuse moi de te le dire trop tard mais j'aimerais faire une convertion a plusieur chiffre comme ("499602d2", base=2).
    pourriez vous aussi expliquer la fonction "hexa.lower" s'il vous plais

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par TheEmperor_ Voir le message
    mais j'aimerais faire une convertion a plusieur chiffre comme ("499602d2", base=2).
    Et qu'est ce qui vous bloque pour faire çà?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    "Et qu'est ce qui vous bloque pour faire çà?"

    c'est le faite que le code donnée ne fonctionne que pour un chiffre, et moi je voudrais qui convertit un nombre comme je le voudrais dans la réponse donner

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par TheEmperor_ Voir le message
    Et qu'est ce qui vous bloque pour faire çà?
    Moi j'ai le droit d'utiliser int et hex...

    Citation Envoyé par TheEmperor_ Voir le message
    c'est le faite que le code donnée ne fonctionne que pour un chiffre, et moi je voudrais qui convertit un nombre comme je le voudrais dans la réponse donner
    Relisez la réponse de flapili qui vous rappelle vos cours du collège.

    Vous réfléchissez un peu... convertir plusieurs chiffres, c'est d'abord convertir chaque chiffre (donc faire une boucle qui appelle cette fonction). Puis vous imaginez un algorithme puis vous essayer de le traduire en Python.

    Ce genre d'exercice n'a d'intérêt que le temps que vous y passer pour découvrir ce que programmer veut dire: le résultat on s'en fout un peu (d'autant qu'on a mieux). On peut vous aidez à comprendre mais il faut commencer par essayer de faire quelque chose par vous même.
    De toutes façons, si vous ne voulez pas y mettre un peu plus de vous même, vous n'apprendrez jamais: autant attendre le corrigé du professeur plutôt que de faire faire vos exercices par d'autres.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    "Relisez la réponse de ] qui vous rappelle vos cours du collège." Deja je suis en premiere c'est la premiere fois que je code et si j'ai pris specilaité NSI c'est juste parce que les autres était encore plus nul, et puis sa sert a rien de me dire d'apprendre par vous meme si on me donne meme pas de quoi reviser

  16. #16
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Il y a beaucoup de codes sur le net proposant des solutions à cet exercice. Pourquoi ne pas reprendre une des solutions et l'analyser pour la comprendre ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  17. #17
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par TheEmperor_ Voir le message
    "Relisez la réponse de ] qui vous rappelle vos cours du collège."
    Pour citer un autre intervenant, il faut faire "répondre avec citation" puis jouer avec les balises quote

    Citation Envoyé par TheEmperor_ Voir le message
    Deja je suis en premiere
    Ben justement, le lycée c'est après le collège...

    Citation Envoyé par TheEmperor_ Voir le message
    c'est la premiere fois que je code
    Oui, on est tous passés par là. Je me souviens mon tout premier premier code c'était pour résoudre une équation du 2° degré à une inconnue...

    Citation Envoyé par TheEmperor_ Voir le message
    et si j'ai pris specilaité NSI c'est juste parce que les autres étaient encore plus nuls,
    D'accord, ce n'est pas "j'ai pris NSI qui est un cours super parce que ça me plaisait" mais "j'ai pris NSI qui est un cours de merde parce qu'il n'y avait rien d'autre". Je vois ta motivation. Donc tu comprendras que de notre côté on ne soit pas motivés pour perdre notre temps à tenter d'aider quelqu'un qui ne s'y intéresse pas plus que ça...

    Citation Envoyé par TheEmperor_ Voir le message
    et puis ça ne sert a rien de me dire d'apprendre par vous meme si on me donne meme pas de quoi reviser
    Ben justement on te l'a donné. Un nombre (ex "XYZ") écrit en base "B" se quantifie comme valant X*B^2 + Y*B^1 + Z*B^0. Ou, si on applique la commutativité de l'addition (cours enseigné au CM donc avant le collège lui-même avant le lycée) valant alors Z*B^0 + Y*B^1 + X*B^2. Donc appliqué au nombre 123 écrit en base 16 il vaut 3 + 2 * 16 + 1 * 256 soit 291 en base 10.
    A toi de trouver un algorithme en instructions simples pour reproduire ce comportement puis d'écrire cet algorithme en Python. Probablement à base de boucle et de compteur car finalement traiter "XYZ" c'est traiter "Z" avec le compteur à 0 puis traiter "Y" avec le compteur à 1 puis traiter "X" avec le compteur à 2 (et oh surprise on retrouve exactement les mêmes valeurs ce qui a été décrit au dessus !!!)

    PS: ce n'est pas parce que tu as survolé le collège sans t'y poser qu'il faut négliger l'orthographe...
    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]

  18. #18
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,
    Citation Envoyé par TheEmperor_ Voir le message
    pourriez vous aussi expliquer la fonction "hexa.lower" s'il vous plais
    C'est pour convertir en lettre minuscule... Par exemple si hexa vaut "A" alors hexa.lower() retournera "a".

    C'est au cas où l'utilisateur utiliserait des lettres majuscules, on les transforme alors en lettres minuscules ce qui nous évite dans le code d'avoir à traiter les lettres majuscules allant de A à F du coup on ne s’occupe que des lettres allant de a à f...

    Citation Envoyé par TheEmperor_ Voir le message
    alors, c'est bien, j'ai mis 5 bonne minute a comprendre chaque instruction mais, excuse moi de te le dire trop tard mais j'aimerais faire une convertion a plusieur chiffre comme ("499602d2", base=2).
    Pour convertir un nombre à plusieurs chiffres il faut notamment convertir chaque chiffre un par un... Pour cela il nous faut donc une fonction qui convertit un nombre à un chiffre c'était la première étape, ça c'est bon c'est fait... Maintenant il faut appliquer cette fonction à chaque chiffre du nombre à convertir et utiliser la formule expliquée par flapili et Sve@r :

    Citation Envoyé par flapili Voir le message
    c'est assez simple mathématiquement parlant, il suffit de se rappeler que par exemple 12310 c'est 1x102 + 2x101 + 3x100, on peux généraliser pour toutes bases, ainsi abc16 est 10x162 + 11x161 + 12x160
    Citation Envoyé par Sve@r Voir le message
    Ben justement on te l'a donné. Un nombre (ex "XYZ") écrit en base "B" se quantifie comme valant X*B^2 + Y*B^1 + Z*B^0. Ou, si on applique la commutativité de l'addition (cours enseigné au CM donc avant le collège lui-même avant le lycée) valant alors Z*B^0 + Y*B^1 + X*B^2. Donc appliqué au nombre 123 écrit en base 16 il vaut 3 + 2 * 16 + 1 * 256 soit 291 en base 10.
    A toi de trouver un algorithme en instructions simples pour reproduire ce comportement puis d'écrire cet algorithme en Python. Probablement à base de boucle et de compteur car finalement traiter "XYZ" c'est traiter "Z" avec le compteur à 0 puis traiter "Y" avec le compteur à 1 puis traiter "X" avec le compteur à 2 (et oh surprise on retrouve exactement les mêmes valeurs ce qui a été décrit au dessus !!!







    Citation Envoyé par TheEmperor_ Voir le message
    comme ("499602d2", base=2).
    Tu veux dire ("499602d2", base=16), non ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/01/2024, 15h32
  2. Algorithmique basique, conversion hexadécimale vers décimale.
    Par Moskitox dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 23/04/2013, 22h34
  3. Réponses: 1
    Dernier message: 22/07/2009, 17h47
  4. Réponses: 4
    Dernier message: 09/04/2008, 20h39
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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