Aller au contenu

TP - Représentation ASCII décimale☘

Dans le dossier [NSI], créez le dossier [A04-Caracteres].

Téléchargez le fichier « à trous » TPA04.11.py (clic droit -> [Enregistrer la cible du lien sous]) et enregistrez-le dans ce dossier.

Consignes communes à chaque partie

Le programme principal contient un appel au module doctest :

##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Un test est donné dans le docstring de chaque fonction.
Il faudra ajouter un plan de test (avec affichage) des fonctions dans le programme principal. Pensez à demander au professeur de vous aider pour écrire et valider ce plan de test...

Ce TP en trois parties a pour but de vous familiariser avec les représentations ASCII décimales.

Important

Dans ce TP, vous devrez vous servir des fonctions ord() et chr() de Python.

Partie A - Types de caractères☘

Dans cette partie, il vous faut compléter les définitions de fonctions permettant de déterminer la nature d'un caractère.

  1. Complétez le corps de la fonction est_un_chiffre() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    def est_un_chiffre(carac):
        """
        carac – str, un caractère
        Sortie: bool – True si le caractère est celui d'un chiffre,
                False sinon
        >>> est_un_chiffre('4')
        True
        >>> est_un_chiffre('a')
        False
        >>> est_un_chiffre('!')
        False
        >>> est_un_chiffre('T')
        False
        """
    

    Test d'assertion

    Cette fonction devra lever l'erreur suivante :

    >>> est_un_chiffre('')
    AssertionError: Le paramètre doit être un seul caractère
    
    >>> est_un_chiffre('ab')
    AssertionError: Le paramètre doit être un seul caractère
    

  2. Complétez le corps de la fonction est_une_minuscule() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    def est_une_minuscule(carac):
        """
        carac – str, un caractère
        Sortie: bool – True si le caractère est celui d'une lettre minuscule,
                False sinon
        >>> est_une_minuscule('4')
        False
        >>> est_une_minuscule('a')
        True
        >>> est_une_minuscule('!')
        False
        >>> est_une_minuscule('T')
        False
        """
    

    Test d'assertion

    Cette fonction devra lever l'erreur suivante :

    >>> est_une_minuscule('')
    AssertionError: Le paramètre doit être un seul caractère
    
    >>> est_une_minuscule('le')
    AssertionError: Le paramètre doit être un seul caractère
    

  3. Complétez le corps de la fonction est_une_majuscule() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    def est_une_majuscule(carac):
        """
        carac – str, un caractère
        Sortie: bool – True si le caractère est celui d'une lettre majuscule,
                False sinon
        >>> est_une_majuscule('4')
        False
        >>> est_une_majuscule('a')
        False
        >>> est_une_majuscule('!')
        False
        >>> est_une_majuscule('T')
        True
        """
    

    Test d'assertion

    Cette fonction devra lever l'erreur suivante :

    >>> est_une_majuscule('')
    AssertionError: Le paramètre doit être un seul caractère
    
    >>> est_une_majuscule('Il')
    AssertionError: Le paramètre doit être un seul caractère
    

  4. Complétez le corps de la fonction est_une_lettre() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    def est_une_lettre(carac):
        """
        carac – str, un caractère
        Sortie: bool – True si le caractère est celui d'une lettre,
                False sinon
        >>> est_une_lettre('4')
        False
        >>> est_une_lettre('a')
        True
        >>> est_une_lettre('!')
        False
        >>> est_une_lettre('T')
        True
        """
    

Partie B - Format de texte☘

Dans cette partie, on manipule des chaînes de caractères à l'aide des fonctions ord() et chr().

  1. Complétez le corps de la fonction texte_en_decimal() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    8
    def texte_en_decimal(texte):
        """
        texte – str, une chaîne de caractères de la table ASCII
        Sortie: list – tableau des représentation décimales ASCII
                de chaque caractère de texte
        >>> texte_en_decimal('Exemple !')
        [69, 120, 101, 109, 112, 108, 101, 32, 33]
        """
    

  2. Complétez le corps de la fonction decimal_en_texte() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    def decimal_en_texte(tab):
        """
        tab – list, tableau contenant des représentations décimales de caractères ASCII
        Sortie: str – chaîne de caractères correspondante
        >>> decimal_en_texte([69, 120, 101, 109, 112, 108, 101, 32, 33])
        'Exemple !'
        """
    

  3. Complétez le corps de la fonction majuscules() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def majuscules(texte):
        """
        texte – str, une chaîne de caractères de la table ASCII
        Sortie: str – chaîne de caractères correspondant à ceux de texte
                mais tous écrits en majuscule. Si le caractère n'est pas une
                lettre minuscule, il n'est pas modifié.
        >>> majuscules('Voici un exemple !')
        'VOICI UN EXEMPLE !'
        """
    

    Une piste

    Comment passer de la représentation décimale ASCII d'un caractère minuscule à celle du caractère majuscule correspondant ?

  4. Complétez le corps de la fonction majuscules() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def minuscules(texte):
        """
        texte – str, une chaîne de caractères de la table ASCII
        Sortie: str – chaîne de caractères correspondant à ceux de texte
                mais tous écrits en minuscule. Si le caractère n'est pas une
                lettre majuscule, il n'est pas modifié.
        >>> minuscules('VoIcI uN eXeMpLe !')
        'voici un exemple !'
        """
    

    Une piste

    Comment passer de la représentation décimale ASCII d'un caractère majuscule à celle du caractère minuscule correspondant ?

  5. Complétez le corps de la fonction premiere_majuscule() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def premiere_majuscule(texte):
        """
        texte – str, une chaîne de caractères non vide de la table ASCII
        Sortie: str – chaîne de caractères correspondant à ceux de texte
                avec le premier caractère écrit en majuscule si celui-ci
                est une lettre mincuscule
        >>> premiere_majuscule('voila !')
        'Voila !'
        """
    

    Test d'assertion

    Cette fonction devra lever l'erreur suivante :

    >>> premiere_majuscule('')
    AssertionError: La chaîne ne peut pas être vide
    

Partie C - Cryptage ROTn☘

Les fonctions de cette partie permettront de coder, puis décoder un message selon l'algorithme appelé ROTn, basé sur le chiffre de César.

  1. Complétez le corps de la fonction decale_chiffre() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    def decale_chiffre(carac, n):
        """
        carac – str, un caractère, chiffre
        n - int, entier
        Sortie: str – chiffre qui correspond au décalage de carac
                dans la table ASCII. Les caractères sont considérés circulairement,
                c'est-à-dire '0' est le suivant de '9'
        >>> decale_chiffre('4', 3)
        '7'
        >>> decale_chiffre('4', -7)
        '7'
        >>> decale_chiffre('4', 48)
        '2'
        """
    

    Une piste

    Le décalage est circulaire. Que se passe-t-il si n vaut 10 ? Si n vaut 20 ? etc...

    Une autre piste

    La valeur de représentation du caractère à obtenir pourrait dépasser celle de la représentation de '9'. Comment faire pour revenir à la valeur de la représentation de '0' ?

  2. Complétez le corps de la fonction decale_minuscule() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    def decale_minuscule(carac, n):
        """
        carac – str, un caractère, lettre minuscule
        n - int, entier
        Sortie: str – lettre minuscule qui correspond au décalage de carac
                dans la table ASCII. Les caractères sont considérés circulairement,
                c'est-à-dire 'a' est le suivant de 'z'
        >>> decale_minuscule('a', 13)
        'n'
        >>> decale_minuscule('a', -7)
        't'
        >>> decale_minuscule('r', 42)
        'h'
        """
    

    Une piste

    Le décalage est circulaire. Que se passe-t-il si n vaut 26 ? Si n vaut 52 ? etc...

    Une autre piste

    La valeur de représentation du caractère à obtenir pourrait dépasser celle de la représentation de 'z'. Comment faire pour revenir à la valeur de la représentation de 'a' ?

  3. Complétez le corps de la fonction decale_majuscule() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    def decale_majuscule(carac, n):
        """
        carac – str, un caractère, lettre majuscule
        n - int, entier
        Sortie: str – lettre majuscule qui correspond au décalage de carac
                dans la table ASCII. Les caractères sont considérés circulairement,
                c'est-à-dire 'A' est le suivant de 'Z'
        >>> decale_majuscule('A', 13)
        'N'
        >>> decale_majuscule('A', -7)
        'T'
        >>> decale_majuscule('R', 42)
        'H'
        """
    

  4. Complétez le corps de la fonction crypt_ROTn() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    8
    def crypt_ROTn(texte, n):
        """
        texte – str, une chaîne de caractères de la table ASCII
        n - int, entier positif ou nul
        Sortie: str – cryptage de texte selon l'algorithme ROTn
        >>> crypt_ROTn('Voici 5 exemples !', 217)
        'Exrlr 2 ngnvyunb !'
        """
    

    Une piste

    Si le caractère n'est ni un chiffre, ni une lettre alors il reste inchangé.

  5. Complétez le corps de la fonction decrypt_ROTn() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    8
    def decrypt_ROTn(texte, n):
        """
        texte – str, une chaîne de caractères de la table ASCII
        n - int, entier positif ou nul
        Sortie: str – décryptage de texte selon l'algorithme ROTn
        >>> decrypt_ROTn('Exrlr 2 ngnvyunb !', 217)
        'Voici 5 exemples !'
        """
    

    Une piste

    Normalement, une seule instruction suffit...

    Exemple

    Utilisez cette fonction pour décrypter le message suivant :
    'Uktoh ! Ohnl toxs ybgb vx MI.'