Exercices en Python : Décimal, binaire et autres bases

Vous pouvez copier-coller les solutions proposées directement dans votre éditeur de programmes Python. Veillez toutefois à retaper vous-même certains programmes afin de vous "faire la main" pour quand vous devrez taper des programmes originaux.

Pour réaliser les exercices de cette page, vous devez avoir compris le système des bases en numération. Si ce n'est pas votre cas, déroulez les explications ci-dessous pour avoir quelques notions dans cette matière.

Introduction aux systèmes des bases en numérotation

Imaginons que vous ayez à dénombrer un certain nombre de petits cubes et ceci dans différentes bases. Comment allez-vous procéder?

Le principe général est le suivant. Prenons une base x dans laquelle vous devez dénombrer ces cubes, x pouvant être 2 pour le binaire, 8 pour l'octal, 10 pour le décimal, 16 pour l'hexadécimal... Vous commencez par faire des tas de x (la base choisie) cubes. Les cubes qui vous resteront feront partie du rang le plus à droite ayant pour valeur x0.

Vous reprenez les tas de x cubes et vous en faites des tas de x tas (ce seront des tas de x fois x cubes). Les tas de x cubes qui vous resteront feront partie du rang suivant, à gauche du précédent, et auront pour valeur x1.

Et ainsi de suite jusqu'à ne plus avoir la possibilité de faire aucun tas suivant. Quelques exemples faciliteront la compréhension de ce système.

Je possède 257 cubes que je dois représenter avec un nombre décimal (en base 10). Je ferai donc des tas de 10 et il m'en restera 7 fois 100. Avec les 25 tas qui me restent, je fais des tas de 10. Il me restera 5 tas de 10, càd 5 fois 101. Avec les 2 tas de 100 j'essaie d'en faire des tas de 10, ce qui n'est pas possible. Il me reste donc une valeur de 2 fois 102. En conséquence, la valeur en base 10 de tous ces cubes sera 25710. L'indice indique la base afin de ne pas confondre avec d'autres bases.

J'ai maintenant un tas de 1110 cubes que je dois représenter en binaire (base 2). Je vais donc faire des tas de 2 cubes et il m'en restera 1 dont la valeur est 1 fois 20. Avec les 5 tas de 2 cubes, j'essaie de faire des tas de 2. Il va me rester un tas de 2 cubes dont la valeur sera 1 fois 21. Avec les 2 tas qui me restent, j'essaie de faire des tas de 2. Il ne me restera pas de tas dont la valeur sera 0 fois 22. Je dois toutefois noter ce 0 afin de signaler que ce rang est vide. Avec le tas qui me reste, j'essaie de faire des tas de 2, ce qui est impossible. Ce reste est donc égal à 1 fois 23. La valeur du tas initial de 1110 cubes s'écrira donc en binaire 10112.

23222120
1011

Si on fait le total de toutes ces valeurs, on obtient bien 1110.

Pour 1610 cubes,obtenez-vous la valeur 208 en octal (base 8)?

Pour 18610 cubes, obtenez-vous bien la valeur BA16 en hexadécimal (base 16) sachant que

La valeur décimale0123456789101112131415
s'écrit en hexadécimal0123456789ABCDEF

Fermer cette introduction

 Exercice 1  : Le programme doit permettre à l'utilsateur d'entrer un nombre décimal au clavier. Le programme affiche alors la valeur de ce nombre en binaire.

Voir une solution

Remarque : cette solution ne tient pas compte du fait que l'utilisateur peut entrer n'importe quels caractères au clavier, ce programme n'est donc pas robuste.

print ("Bonjour, ce programme va vous permettre d'entrer au clavier un nombre décimal. Il va ensuite transformer ce décimal en binaire.")
decimal = int(input("Donnez-moi le nombre décimal que vous voulez transformer : "))
calcul = decimal # calcul va être utilisé pour effectuer les divisions successives pas 2
binaire = [ ] # binaire va accueillir les restes des divisions entières par 2 mais à l'envers. Pq?
while calcul > 0:
     binaire.append(calcul % 2) # Reste de la division entière par deux
     calcul = calcul // 2 # Division entière du résultat précédent
binaire.reverse() # La chaîne obtenue est à l’envers par rapport aux rangs
print (decimal, "en décimal vaut", binaire, "en binaire")

Cacher cette solution

 Exercice 2  : Le programme doit permettre à l'utilsateur d'entrer un nombre binaire au clavier. Le programme affiche alors la valeur de ce nombre en décimal.

Voir une solution

Remarque : cette solution ne tient pas compte du fait que l'utilisateur peut entrer n'importe quels caractères au clavier, ce programme n'est donc pas robuste.

Ce programme va parcourir le nombre binaire en partant de la fin grâce à une boucle FOR et on va exposer chaque caractère 0 ou 1 à la puissance de la variable de la boucle FOR allant de 0 à la longueur du nombre binaire.

print ("Ce programme va transformer le nombre binaire entré au clavier en un nombre décimal")
binaire = input("Donnez-moi le nombre binaire à transformer en décimal : ")
decimal = 0
for i in range (len(binaire)):
     decimal += int(binaire[len(binaire) - 1 - i]) * 2**i # On multiplie le caractère 0 ou 1 par 2i
print("Le nombre binaire", binaire, "vaut", decimal, "en décimal.")

Cacher cette solution

 Exercice 3  : Le programme doit permettre à l'utilisateur d'entrer un nombre décimal au clavier. Le programme affiche alors la valeur de ce nombre en octal.

 Exercice 4  : Le programme doit permettre à l'utilisateur d'entrer un nombre décimal au clavier. Le programme affiche alors la valeur de ce nombre en hexadécimal.

 Exercice 5  : Le programme doit permettre à l'utilisateur d'entrer un nombre octal au clavier. Le programme affiche alors la valeur de ce nombre en décimal.

 Exercice 6  : Le programme doit permettre à l'utilisateur d'entrer un nombre hexadécimal au clavier. Le programme affiche alors la valeur de ce nombre en décimal.

Vous pouvez essayer toutes les conversions numériques imaginables, juste pour "vous amuser"... :O)

Bon travail.

Retour