FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 2 septembre 2018 

 
OuvrirSommaireType de donnéesLes nombres

Pour convertir un nombre X (écrit sous forme d'une chaîne de caractères) d'une base quelconque en base 10 (ou nombre entier), on utilise la fonction int(x [,base])base représente la base sous laquelle est écrit le nombre.

 
Sélectionnez

>>> int('AA', 16)  ## Conversion de AA de la base 16 à la base 10
170
>>> int('0xAA', 16)  ## Conversion de OxAA de la base 16 à la base 10
170
>>> int('71', 8)   ## Conversion de 71 de la base 8 à la base 10
57
>>> int('071', 8)   ## Conversion de 071 de la base 8 à la base 10
57
>>> int('AA', 11)  ## Conversion de 11 de la base 11 à la base 10
120

Si base=0, la base est déterminée automatiquement en fonction de l'écriture du nombre sous forme de chaîne. Par exemple, un nombre hexadécimale est écrit sous forme d'une chaîne commençant par 0x, un nombre octale sous forme d'une chaîne commençant par 0. Dans ces cas-là, on n'est pas obligé de spécifier la base de départ en lui donnant la valeur 0.

 
Sélectionnez

>>> int('0x15',0)
21
>>> int('071', 0)
57
Créé le 29 novembre 2005  par Guigui_

Pour convertir un nombre entier (ou en base 10) en un nombre octal, on utilise la fonction oct(N)

 
Sélectionnez

>>> oct(21)
'025'

Pour convertir un nombre entier (ou en base 10) en un nombre hexadécimal, on utilise la fonction hex(N)

 
Sélectionnez

>>> hex(21)
'0x15'

A partir de la version 2.6 de Python, pour convertir un nombre entier (ou en base 10) en un nombre binaire, on utilise la fonction bin(N)

 
Sélectionnez

>>> bin(21)
'0b10101'

Pour convertir dans d'autres bases, vous devrez programmer vos propres fonctions

Mis à jour le 5 novembre 2008  par Guigui_

Il n'existe pas de fonctions dans la distribution de Python pour convertir un nombre entier en binaire. Vous devez donc écrire votre propre fonction.
Voici une fonction qui construit une chaîne binaire à partir d'un nombre. Elle est basé sur l'algorithme d'Euclide.

 
Sélectionnez

def bin(n):
    """Convertit un nombre en binaire"""
    q = -1
    res = ''
    while q != 0:
        q = n // 2
        r = n % 2
        res = `r` + res
        n = q
    return res

>>> bin(109323)
'11010101100001011'

On peut accélérer le processus avec un code sur le même algorithme mais beaucoup plus concis (suppression de toutes les variables intermédiaires); ce qui peut être utile si on a besoin de convertir beaucoup de nombres

 
Sélectionnez

def bin_optimise(n):
    """Convertit un nombre en binaire"""
    if n == 0: return '0'
    res = ''
    while n != 0: n, res = n >> 1, `n & 1` + res
    return res

Un petit test pour vérifier le gain en temps

 
Sélectionnez

import time

n = 1000000
a = time.clock()
for i in range(n): bin(i)
b = time.clock()
for i in range(n): bin_optimise(i)
c = time.clock()
print b-a, ',', c-b

>>> 15.9132169033 , 12.7892307542

A partir de la version 2.6 de Python, les nombres binaires font leur apparition et commence par 0b. Pour convertir un nombre entier en binaire, il suffit alors de passer par la fonction bin

 
Sélectionnez

>>> print (0bbb)
7
>>> bin(7)
'0b111'
Mis à jour le 5 novembre 2008  par oiffrig, Guigui_

Pour obtenir le code ascii d'une caractère, il suffit d'appliquer la méthode ord(c)c est le caractère en question. ord renvoie un nombre entre 0 et 65535. S'il s'agit d'un caractère ascii, le code sera compris entre 0 et 255.

 
Sélectionnez

>>> ord("é")        
233
>>> ord("a")        
97
>>> ord(" ")        
32
>>> ord(u'\u9000')  
36864

Si vous voulez l'ensemble des codes ascii d'une chaîne de caractères, il suffit d'utiliser la fonction map( ord, machaîne) ou bien d'utiliser une liste en intention.

 
Sélectionnez

>>> map(ord, "abcde")        
[97, 98, 99, 100, 101]
>>> [ord(i) for i in "abcde"] 
[97, 98, 99, 100, 101]

la méthode inverse est unichr(i) pour obtenir le caractère unicode de i ou chr(i) pour obtenir le caractère ascii de i. Dans ce dernier ça, i doit être compris entre 0 et 255, une erreur est retournée sinon.

 
Sélectionnez

>>> unichr(63000)  
u'\uf618'
>>> unichr(97)     
u'a'
>>> chr(97)        
'a'
Créé le 2 décembre 2006  par Guigui_
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005-2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.