bin(2)
int('0b10',2)

En utilisant ces commandes,

  • donner la valeur binaire du nombre décimal 123
  • donner la valeur décimale du nombre binaire 1001110

Mais comment fait-il ? Nous allons réécrire nos propres fonctions. Commençons par remarquer que l'écriture binaire d'un nombre est donné par Python sous forme d'une chaîne de caractères, c'est à dire un texte délimité par des guillemets. Nous allons commencer par voir quelques règles basiques de manipulation des chaînes.

Manipulations de chaînes de caractère

maChaine="Ceci est une chaine"
autreChaine=" de caractère"

Concaténation

On utilise l'opération '+' pour mettre deux chaînes de caractères bout à bout.

maChaine + autreChaine

Attention : Une chaîne de caractère n'est pas un nombre. Observez attentivement cet exemple :

a='2'
b='5'
a+b
a='2'
b=5
a+b
a=2
b=5
a+b

Conversion Chaînes - Nombres

Il est possible de convertir un nombre en chaîne de caractère et réciproquement. On utilise pour cela les fonctions str et int de python :

a=12
type(a)
b=str(a)
type(b)

Remarquez la fonction type permettant de connaître le type d'une variable. $a$ est de type entier alors que $b$ est de type chaîne.

b
a+a
b+b
int(b+b)

le slicing où comment découper des parties d'une chaîne de caractère

On peut extraire une sous chaîne de caractère à partir d'une chaîne en faisant suivre la chaîne de crochets contenant les indices de début et de fin de la chaîne que l'on souhaite extraire. Il faut savoir qu'en python, les indices commencent à 0. Observez les exemples suivants :

maChaine="Ceci est un texte"
maChaine[0]
maChaine[6]
len(maChaine)
maChaine[16]
maChaine[17]
maChaine[0:3]
maChaine[5:10]

Il est possible de ne pas préciser le second indice après :. Dans ce cas, on obtient la fin de la chaîne à partir de l'indice de début précisé.

maChaine[3:]

Renverser une chaîne

Il y a beaucoup à voir sur le slicing, en particulier l'utilisation des indices et des pas négatifs, mais nous en avons déjà assez vu. Juste un dernier exemple pratique permettant de renverser une chaîne de caractère

maChaine[::-1]

Parcourir une chaîne de caractère par une boucle pour

Il est possible de parcourir un à un chacun des caractères d'une chaîne très facilement en python. Observez cet exemple et admirez à quel point la syntaxe Python est proche du langage naturel !

nb=0
for c in maChaine:
    print("Je lis le caractère : ",c)
    nb +=1
print(f"Il y a {nb} caractères dans cette chaîne")

A vous de jouer

Vous allez créer une fonction somme

  • prenant en paramètre un nombre entier $n$
  • renvoyant la somme des chiffres composant $n$

Exemple : somme(1234) devra renvoyer 10

Indication : Vous pourrez

  • convertir $n$ en chaîne de caractère
  • parcourir chaque caractère
  • ajouter le chiffre correspondant à une variable total
  • retourner la valeur de total

Remarque : Rappelez vous que 1+2 vaut 3 mais '1'+'2' vaut '12' !! je dis ça, je dis rien :)

# A vous de compléter ...

def 

Convertir un binaire en décimal

Vous êtes maintenant armés pour convertir un binaire en décimal. Avant toute chose, avant d'écrire une fonction, on doit se faire une idée très précise de son fonctionnement avec un papier et un crayon.

Prenons l'exemple du nombre $b='0b1101'$. Pour le convertir en décimal, nous allons le parcourir de la gauche vers la droite et totaliser au fur à mesure le nombre obtenu avec des puissances de 2. Observez la démarche :

  1. On se débarasse de l'entête b='1101'
  2. On initialise une variable $n\leftarrow$ 0
  3. On parcourt b de gauche à droite, caractère par caractère à l'aide d'une boucle
  • On lit '1'. On l'ajoute donc à $n$ qui vaut 1
  • On lit '1' à nouveau. Avant de l'ajouter à $n$, il faut multiplier $n$ par 2 (10 en binaire) du fait du décalage des bit d'un rang vers la gauche. $n$ vaut donc à présent $2\times 1 + 1$ soit 3 -c'est l'écriture décimale de 11 en binaire, tout va bien !
  • On lit '0'. Comme précédemment, on va multiplier $n$ par 2 afin de tenir compte du décalage des bits vers la gauche. $n$ vaut alors 6 et comme on a lu 0, on ajoute rien.
  • Pour finir, on lit '1'. On va donc multiplier $n$ par 2 et ajouter 1, ce qui nous donne $2\times 6+1$ soit 13
  1. On renvoie le résultat final n=13
int('0b1101',2)

Pour bien vous imprégner de l'algorithme, appliquez cette même méthode pour convertir '0b101110' en décimal sur votre feuille. Ne validez la cellule suivante qu'une fois le calcul fait à la main !!

int('0b101110',2)

Si on résume l'algorithme, il ressemble à ceci :

  tronquer la chaîne b pour enlever '0b'
  Initialiser $n à 0
  parcourir la chaîne b
  multiplier n par deux et ajouter le chiffre binaire lu
  renvoyer le résultat n

Il ne vous reste plus qu'à créer la fonction bin2dec

  • qui prend en entrée une chaîne au format binaire (comme'0b1101')
  • qui renvoie l'écriture décimale du nombre

Ainsi bin2dec('0b1101') devra renvoyer 13

A vous de jouer

# A vous de compléter ...

def 

Convertir un décimal en binaire

Nous allons faire maintenant l'opération inverse, c'est à dire passer d'une écriture décimale à binaire : Exemple : dec2bin(13) devra renvoyer '0b1101'

Pour cette seconde fonction, vous commencerez par vous familiariser avec l'algorithme en le faisant fonctionner à la main sur des exemples. Ce n'est qu'une fois à l'aise avec le calcul à la main que vous pourrez apprendre à pyhton comment faire.

L'algorithme consiste à faire des divisions successives par 2 et à regarder le reste. Le reste d'une division par 2 est 0 si le nombre est pair, ou 1 si le nombre est impair. Cela donne justement les chiffres de notre nombre binaire !! Observez l'exemple

n Quotient par 2 reste
13 6 1
6 3 0
3 1 1
1 0 1

On s'arrète lorsque le quotient par 2 est nul. Les restes successifs sont 1, 0 1 et 1 ce qui est justement l'écritune binaire de 13 écrit de la droite vers la gauche, mais vous savez renverser une chaîne de caractère n'est-ce pas :)

Division et reste en Python

Avant de vous laisser créer la fonction, voici les opérateurs qui vous seront utiles :

  • Division entière : //
  • reste : %

Regardez sur cet exemple :

13//2
13%2

Le quotient de 13 par 2 est bien 6 et il reste 1.

A vous de jouer.

Après vous être exercés sur papier à la conversions de nombres de decimal en binaire, il ne vous reste plus qu'à créer la fonction dec2bin

  • qui prend en entrée un entier décimal
  • qui renvoie l'écriture binaire du nombre sous forme d'une chaîne '0b....'
# A vous de compléter ...

def