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 :

conversion décimal - duodécimal [Fait]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut conversion décimal - duodécimal
    Hello

    j'avançe dans Python, un passe-temps plus agréable que le sudoku.
    J'aimerais développer quelques petites applications dans le domaine musique, mais pour cela j'aurais besoin de passer en base 12.
    J'arrive bien à le faire de duodécimal en décimal comme ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print "entrez le nombre duodécimal a convertir en décimal"
    nn = raw_input()
    print int(nn, 12)
    mais je ne parviens pas a faire l'inverse où il me faudrait donc écrire une fonction adéquate. Mes compétences actuelles n'étant pas à niveau, je me suis demandé s'il existait pareille fonction déja écrite qq part

    merci

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    tu peux utiliser la même méthode que pour la conversion int -> bin ( http://python.developpez.com/faq/?pa...#Base10ToBase2 ) en prenant un modulo 12 au liue d'un module 2 et également pour que le 10=A et 11=B prendre le nombre hexadécimal du reste obtenu à chaque fois. Ceci devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def inttobase12(n):
        """Convertit un nombre en base 12"""
        q = -1
        res = ''
        while q != 0:
            q = n // 12
            r = n % 12
            res = hex(r)[2:] + res
            n = q
        return res
     
    print inttobase12(109999)
    print int("537a7", 12)

  3. #3
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut
    salut guigui, je vais décortiquer tout ça! En tout cas ça semble fonctionner sans problèmes. De quoi me permettre de poursuivre
    merci de partager vos connaissances, même avec des novices comme moi

  4. #4
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut
    une question probablement idiote:
    comment définir une base de calcul pour un bloc d'opérations?
    2B + 2B = 5A

  5. #5
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    tu es obligé de convertir tes nombres en base 10, de faire l'opération puis de le reconvertir en base 12.
    Si tu ne veux pas faire cela à chaque fois, tu peux te faire une classe qui te gère les nombres en base 12 (=> http://python.developpez.com/faq/?pa...utableHeritage )

    Voilà un exemple. Attention inttobase(12) ne gère pas les nombres négatifs (donc modifier cette fonction si tu veux que cela les gère)

    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
    29
    30
    31
    32
    33
    34
    # -*- coding: cp1252 -*-
    def inttobase12( n):
        """Convertit un nombre en base 12"""
        q = -1
        res = ''
        while q != 0:
            q = n // 12
            r = n % 12
            res = hex(r)[2:] + res
            n = q
        return res
     
    class int12(str):
        def __new__(self, n):
        	## On retourne un int12
            if type(n) == str: return str.__new__(self, n)
            elif type(n) == int: return str.__new__(self, inttobase12(n))
        def __sub__(self, n):
        	## On calcule la différence de 2 int12
            return int12(int(self, 12)-int(n, 12))
        def __add__(self, n):
        	## On calcule la somme de 2 int12
            return int12(int(self, 12)+int(n, 12))
     
     
     
    C = int12("2B")
    print C + C
     
    A = int12(540)
    B  = int12("B12A")
    print A, B
    print B - A
    print A + B

  6. #6
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut
    extra, quelle class!

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

Discussions similaires

  1. [Conversion] Décimal vers caractère (Ascii)
    Par Hokage dans le forum Débuter
    Réponses: 2
    Dernier message: 01/10/2007, 11h39
  2. Réponses: 3
    Dernier message: 28/12/2006, 15h06
  3. Conversion Décimal -> Binaire
    Par Z-Vegeta dans le forum Pascal
    Réponses: 2
    Dernier message: 22/12/2006, 23h10
  4. conversion décimale -> héxadécimale
    Par cout dans le forum C
    Réponses: 6
    Dernier message: 03/07/2006, 14h51
  5. Algo Conversion Décimal -> Binaire
    Par MisterTee dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 23/02/2006, 22h53

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