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.'