FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 269, dernière mise à jour : 10 septembre 2014  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions posées sur le forum Python complétées par d'autres questions qui pouvaient nous sembler intéressantes de traiter. Toutefois il se peut que les réponses apportées contiennent des erreurs, imprécisions ... Vous pouvez dans ce cas contacter un des membres de la rédaction pour lui faire part de vos remarques.

L'équipe Python de Developpez.


SommaireType de donnéesLes nombres (4)
précédent sommaire suivant
 

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.

Code python :
1
2
3
4
5
6
7
8
9
10
>>> 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.

Code python :
1
2
3
4
>>> int('0x15',0) 
21 
>>> int('071', 0) 
57

Mis à jour le 29 novembre 2005 Guigui_

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

Code python :
1
2
>>> oct(21) 
'025'
Pour convertir un nombre entier (ou en base 10) en un nombre hexadécimal, on utilise la fonction hex(N)

Code python :
1
2
>>> 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)

Code python :
1
2
>>> bin(21) 
'0b10101'
Pour convertir dans d'autres bases, vous devrez programmer vos propres fonctions

Mis à jour le 29 novembre 2005 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.

Code python :
1
2
3
4
5
6
7
8
9
10
11
12
13
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

Code python :
1
2
3
4
5
6
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

Code python :
1
2
3
4
5
6
7
8
9
10
11
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

Code python :
1
2
3
4
>>> print (0bbb) 
7 
>>> bin(7) 
'0b111'

Mis à jour le 10 octobre 2006 Guigui_ oiffrig

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.

Code python :
1
2
3
4
5
6
7
8
>>> 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.

Code python :
1
2
3
4
>>> 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.

Code python :
1
2
3
4
5
6
>>> unichr(63000)   
u'\uf618' 
>>> unichr(97)      
u'a' 
>>> chr(97)         
'a'

Mis à jour le 2 décembre 2006 Guigui_

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2014 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

 
 
 
 
Partenaires

PlanetHoster
Ikoula