Votre exercice obligatoire 2

Affichage et lecture des nombres

Quand vous voyez un nombre, disons 16083, intuitivement vous intégrez dans votre conscience : seize mille, quatre-vingt-trois. Dans la mémoire de la machine, ceci est un nombre binaire, dont la représentation interne ne nous intéresse pas, il suffit de savoir que l'arithmétique soit correcte, l'affichage aussi. Mais cette représentation interne n'a rien à voir (directement) avec la séquence de chiffres décimaux.
Cependant sur papier, sur l'écran, ceci n'est qu'une séquence : un, six, zéro, etc. Très différente d'un "nombre", on ne peut y appliquer les opérations arithmétiques.

Vous allez convertir entre ces deux objets, le "numérique", et le "visuel". Pour éviter tout problème lié aux caractères, chaînes de caractères, etc. on travaille exclusivement avec les nombres. La représentation visuelle d'un nombre, comme ci-dessus sera une liste [1,6,0,8,3] ou un tuple (1,6,0,8,3). (Ici : aucune différence importante entre les tuples et les listes, seulement les listes peuvent être modifiées. Choisissez ce que vous convient). Répétons : les chiffres dans cette liste : 1, 6, etc. sont aussi des nombres, seulement restreints entre 0 et 9, pas de chaînes de caractères. Nous allons traiter nombres entiers positifs, rien d'autre.

Exercice A.

Étant donnée une séquence [c0, c1, c2, ..., cN], par ex. [1,6,0,8,3], reconstruire un "vrai" nombre Python, ici visualisé comme 16083. Vous savez que 1, pusque c'est le chiffre numéro 4 à partir de la droite, il sera multiplié par 10000. Le suivant, 6 : par mille, car c'est le troisième ; etc. On ajoute tout, finalement on ajoute 3, le dernier chiffre sans aucun facteur de pondération.

Ne confondez surtout pas l'exemple : 16083 avec le problème ! Vous allez convertir UN AUTRE NOMBRE, concrètement, vous devez engendrer la séquence de 7 chiffres aléatoires grâce à la fonction randint du module random.

L'exercice se réduit à une boucle sur les chiffres. Une technique alternative peut profiter du fait que si un fragment (à gauche) xxx a déjà été construit, et il faut l'augmenter par le chiffre c suivant, le fragment "vaut" 10 fois plus, avant d'y ajouter c comme le dernier chiffre, avant de poursuivre l'opération.


Exercice B.

Opération inverse. Étant donné un nombre entier positif, par ex. 16083 (mais vous "ne le voyez pas", il est stocké dans une variable x dans le programme ; vous le créez par randint entre 1 et, disons, cinq milliards), reconstruire la séquence de ses chiffres.

Observez que le dernier chiffre est le reste de la division par 10, et la division (entière) par 10 donne un nombre dont les chiffres sont les mêmes, sauf - justement - le dernier. Donc, une boucle while qui réduit x jusqu'à la fin (quand le nombre devient plus petit que 10, voire zéro) suffit pour résoudre l'exercice.


Attention. Les deux programmes demandés doivent avoir la forme de fonctions Python, qui acceptent leurs paramètres (une séquence dans le premier exercice et un nombre dans le second), et retournent le résultat. À l'intérieur des fonctions on n'imprime rien. À l'extérieur on affiche les arguments et les résultats.


Envoyez par mail à mon adresse une lettre qui contient dedans, OU comme un attachement, votre programme, dûment identifié par nom du fichier, et aussi par un commentaire interne.

Le message mail doit contenir le nom complet de l'auteur, et l'adresse d'envoi doit être votre adresse universitaire ; pas de gmail etc. SVP. Le sujet du message doit être communicatif : de quoi s'agit-il, par ex.: "Python, devoir 2, nom_étudiant". Vérifiez si le programme marche avant l'envoi. Après l'envoi vérifiez si l'adresse de destinataire était correct. Avant de quitter la salle vérifiez si j'ai reçu votre message.

Mon adresse mail : jerzy.karczmarczuk@unicaen.fr