FAQ Python
FAQ PythonConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 14 juin 2021
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]) où base représente la base sous laquelle est écrit le nombre.
>>>
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.
Pour convertir un nombre entier (ou en base 10) en un nombre octal, on utilise la fonction oct(N)
>>>
oct(
21
)
'025'
Pour convertir un nombre entier (ou en base 10) en un nombre hexadécimal, on utilise la fonction hex(N)
>>>
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)
>>>
bin
(
21
)
'0b10101'
Pour convertir dans d'autres bases, vous devrez programmer vos propres fonctions
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.
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
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
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
>>>
print
(
0
bbb)
7
>>>
bin
(
7
)
'0b111'
Pour obtenir le code ascii d'une caractère, il suffit d'appliquer la méthode ord(c) où 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.
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.
>>>
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.