Sur les chaînes de caractères

Consignes

Le code Python utilisé pour définir vos fonctions doit obligatoirement se limiter à ce que l'on trouve dans le cours. Il est parfaitement interdit d'aller chercher des fonctions "magiques" ici ou là qui feront une partie du travail. Un tel code serait évalué par la note minimale. Savoir se servir de la documentation d'un langage, savoir utiliser les bibliothèques du langage sont des capacités à acquérir sur le long terme lorsqu'on apprend à programmer, mais ce n'est pas du tout l'objectif de ce début d'année: vous devez d'abord apprendre à maîtriser les instructions de base, à maîtriser le contenu du cours (ce qui est déjà un travail conséquent !)

Bien entendu, les fonctions de tests ne doivent pas renvoyer d'erreur d'assertion.

Et évidemment, il ne doit y avoir aucune erreur de syntaxe dans votre code !

Rappelons également que le code déjà écrit dans l'énoncé ne doit en aucun cas être modifié.

Exercice 1

Dans cet exercice, on supposera que le paramètre chaine de la fonction est toujours écrit sans utiliser de lettres accentuées.

Code à compléter:

def uniquement_minuscules(chaine):
    """
    chaine: de type str
    Renvoie True si tous les caractères, sauf éventuellement le premier, sont
    des minuscules (où minuscule désigne l'une quelconque des lettres
    de l'alphabet: a, b, c, ..., z écrite en minuscule). 
    Si le premier caractère n'est pas une minuscule, ce doit être une majuscule (c'est 
    à dire une lettre parmi A, B, C, ..., Z).
    Renvoie False sinon.
    >>> uniquement_minuscules("Python")
    True
    >>> uniquement_minuscules("Jean-Antoine")# False à cause du caractère - et du caractère A 
    False
    >>> uniquement_minuscules("gasteropoDe")
    False
    >>> uniquement_minuscules("gasteropode") 
    True
    >>> uniquement_minuscules("un essai") # une espace n'est pas une minuscule
    False
    >>> uniquement_minuscules("3essais") # un caractère-chiffre n'est ni une minuscule ni une majuscule
    False
    """

Exercice 2

Code à compléter:

def k_premieres_lettres(mot, k):
    """
    mot: de type str
    k: entier compris entre 0 et len(mot)
    renvoie un mot constitué des k premières lettres de mot
    >>> k_premieres_lettres("informatique", 4)
    'info'
    >>> k_premieres_lettres("informatique", 0)
    ''
    >>> k_premieres_lettres("zorglub", 7)
    'zorglub'
    """

On teste ci-dessous que l'on a bien un message d'erreur d'assertion lorsqu'on ne donne pas une valeur de k en cohérence avec la longueur de chaîne donnée en paramètre:

Exercice 3

Rappel: il est important de découper les fonctions en "petites tâches", votre code tout au long de l'année devra s'attacher à cela. En particulier, la fonction ci-dessous aura clairement un code plus simple si elle fait appel à la fonction de l'exercice 2...

Code à compléter:

def repetition_abrege(mot):
    """
    mot: de type str
    précondition: mot est une chaîne non vide.
    renvoie le mot "répété" avec des répétitions tronquées:  
        la répétition 1 complète,
        la répétition 2 avec la dernière lettre en moins, 
        la répétition 3 avec 2 lettres en moins... 
        jusqu'à la dernière répétition ne comportant que la première lettre.
    >>> repetition_abrege("nsi")
    'nsinsn'
    >>> repetition_abrege("python")
    'pythonpythopythpytpyp'
    """

Une autre version (on a remplacé le while par un for):

Exercice 4

Code à compléter:

def lettres_repetees(mot, lettres, n):
    """
    mot: chaîne de caractères
    lettres: des lettres à répéter
    n: entier > 1
    renvoie le mot d'origine dans lequel les caractères de lettres sont répétées n fois.
    >>> lettres_repetees("python", "yh", 3)
    'pyyythhhon'
    >>> lettres_repetees("Dijkstra", "ija", 2)
    'Diijjkstraa'
    >>> lettres_repetees("Dijkstra", "ija", 0)
    'Dkstr'
    >>> lettres_repetees("Boole", "o", 1)
    'Boole'
    >>> lettres_repetees("Boole", "o", 2)
    'Boooole'
    >>> lettres_repetees("Boole", "o", 0)
    'Ble'
    """

En pseudo-code:

fonction lettres_repetees(mot, lettres, n):
    resultat  ←  chaîne vide
    Pour chaque caractère de mot:
        si ce caractère n'est pas dans lettres:
            on ajoute le caractère une fois à resultat 
        sinon: 
            on ajoute n fois ce caractère à resultat
    renvoyer resultat

On a découpé en petites fonctions. De façon générale, pensez toujours à introduire des fonctions intermédiaires. On clarifie ainsi le code, on le simplifie. La lecture de chaque fonction est plus simple, on se concentre sur une seule tâche à la fois. Une conséquence importante est la simplification du débugage.