Aller au contenu

TP - Chiffres d'un nombre

Téléchargez le fichier « à trous » TPF01.41.py (clic droit -> [Enregistrer sous]) et enregistrez-le dans le dossier [F01-Bases de programmation].

Important

Dans chaque fonction à programmer, remplacez le mot-clef pass par les instructions nécessaires.

De plus, ne vous précipitez pas sur les pistes !
Prenez le temps de réflechir et chercher par vous-même en suivant les conseils ci-après.

Conseils

  • Pour exécuter ce programme, il suffit de le sauvegarder puis d'appuyer sur la touche [F5].
  • Avez-vous bien fait un schéma au brouillon pour visualiser le problème posé ?
  • Avez-vous essayé de rédiger un algorithme en français, avec vos propres mots, avant de vous lancer dans la programmation sur machine ?
  • Avez-vous utilisé des affichages intermédiaires, des print(), pour visualiser au fur et à mesure le contenu des variables ?
  • Avez-vous testé le programme avec les propositions de tests fournies ?
  • Avez-vous testé le programme avec de nouveaux tests, différents de ceux proposés ?

Partie 1 : Chiffre des unités, chiffre des dizaines

  1. Copiez/collez et complétez le corps de la fonction chiffre_unite() en respectant ses spécifications.

    1
    2
    3
    4
    5
    def chiffre_unite(n):
        """
        n – int, entier positif ou nul
        Sortie : int - le chiffre des unités de n 
        """
    

    Une piste

    Pensez à la division entière en testant les instructions n%10 et n//10 dans la console.

  2. Vérifiez et corrigez si besoin votre travail avec l'aide des tests suivants :

    >>> chiffre_unite(254)
    4
    
    >>> chiffre_unite(5629)
    9
    
  3. Copiez/collez et complétez le corps de la fonction chiffre_dizaine() qui renvoie le chiffre des dizaines de l'entier n entré en paramètre.

    1
    2
    3
    4
    5
    def chiffre_dizaine(n):
        """
        n – int, entier positif ou nul
        Sortie : int - le chiffre des dizaines de n 
        """
    

  4. Vérifiez et corrigez si besoin votre travail avec l'aide des tests suivants :

    >>> chiffre_dizaine(254)
    5
    
    >>> chiffre_dizaine(5629)
    2
    

Partie 2 : Chiffre de poids k

Dans un nombre entier, le poids d'un chiffre est son rang (sa position) à partir du chiffre de droite.

Considérons par exemple le nombre 547. Alors :

  • 7 est le chiffre de poids 0 ;
  • 4 est le chiffre de poids 1 ;
  • 5 est le chiffre de poids 2.

Travail à faire

  1. Copiez/collez et complétez le corps de la fonction chiffre_poids() qui doit renvoyer le chiffre de poids k de l'entier n.

    1
    2
    3
    4
    5
    def chiffre_poids(k, n):
        """
        k, n – int, entiers positifs ou nuls
        Sortie : int - le chiffre de n ayant pour « poids » k
        """
    

    Une piste

    Inspirez-vous de la fonction chiffre_dizaine() en utilisant une boucle for afin d'atteindre ce chiffre de poids k.

  2. Vérifiez et corrigez si besoin votre travail avec l'aide des tests suivants :

    >>> chiffre_poids(0, 254)
    4
    
    >>> chiffre_poids(1, 254)
    5
    
    >>> chiffre_poids(2, 254)
    2
    
    >>> chiffre_poids(3, 254)
    0
    

Partie 3 : Nombre de chiffres

  1. Copiez/collez et complétez le corps de la fonction nb_chiffres() en respectant ses spécifications.

    1
    2
    3
    4
    5
    def nb_chiffres(n):
        """
        n – int, entier positif ou nul
        Sortie : int - le nombre de chiffres de l'entier n
        """
    

    Une piste

    Tant que le nombre de dizaines n'est pas nul, on augmente le nombre de chiffres de 1...

    Une autre piste

    Voici une proposition de code « à trous », à compléter :

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    def nb_chiffres(n):
        """
        n – int, entier positif ou nul
        Sortie: int - le nombre de chiffres de l'entier n
        """
        nb = 1
        while ... :
            nb = ...
            n = ...
        return nb
    

  2. Vérifiez et corrigez si besoin votre travail avec l'aide des tests suivants :

    >>> nb_chiffres(254)
    3
    
    >>> nb_chiffres(5029)
    4
    

Partie 4 : Somme des chiffres

  1. Copiez/collez et complétez le corps de la fonction somme_chiffres() en respectant ses spécifications.

    1
    2
    3
    4
    5
    def somme_chiffres(n):
        """
        n – int, entier positif ou nul
        Sortie : int - la somme des chiffres de l'entier n
        """
    

    Une piste

    Tant que le nombre de dizaines n'est pas nul, on ajute le chiffre des unités à la somme calculée.

  2. Vérifiez et corrigez si besoin votre travail avec l'aide des tests suivants :

    >>> somme_chiffres(254)
    11
    
    >>> somme_chiffres(5029)
    16
    

Partie 5 : Divisibilité par 3

Cette partie est un peu plus délicate à traiter. Réalisez un brouillon avant de vous lancer dans le code...

  1. En utilisant la fonction somme_chiffres() de la partie précédente, programmez la fonction somme_tot_chiffres() qui calcule la somme des chiffres de l'entier n saisi en paramètre. Si cette somme n'est pas compris entre 0 et 9, on calcule alors la somme des chiffres de cette somme... et ainsi de suite jusqu'à obtenir un résultat entre 0 et 9, à renvoyer.

    Une piste

    Voici une proposition de code « à trous », à compléter :

    1
    2
    3
    4
    5
    6
    7
    8
    def somme_tot_chiffres(n):
        """
        n – int, entier positif ou nul
        Sortie: int - la somme des chiffres de l'entier n
                jusqu'à obtenir un seul chiffre
        """
        somme = somme_chiffres(n)
        while ...
    

  2. Utilisez la fonction somme_tot_chiffres() pour définir la fonction est_multiple_3() qui renvoie un booléen indiquant si l'entier naturel saisi en paramètre est un multiple de 3 (il est interdit d'utiliser le modulo « % »).

  3. Vérifiez votre travail avec l'aide des tests suivants :

    >>> est_multiple_3(5029)
    False
    
    >>> est_multiple_3(5027)
    False
    
    >>> est_multiple_3(5028)
    True