Aller au contenu

f-string

f-string

Placer un f devant une chaîne de caractères permet d'intégrer les valeurs de variables dans la chaîne.

>>> a = 5
>>> b = 6
>>> chaine = f"a a pour valeur {a} et b a pour valeur {b}."
>>> chaine
'a a pour valeur 5 et b a pour valeur 6.'

Cette notation est très pratique pour avoir des messages explicites.

Cette possibilité n'a été introduite qu'à la version 3.6 de Python. Pour une version antérieure à la 3.6, on utilisera format (moins lisible):

>>> a = 5
>>> b = 6
>>> chaine = "a a pour valeur {} et b a pour valeur {}.".format(a, b)
>>> chaine
'a a pour valeur 5 et b a pour valeur 6.'

On peut également utiliser la concaténation de chaînes et la conversion de types pour aboutir à la même chaîne:

>>> a = 5
>>> b = 6
>>> chaine = "a a pour valeur " + str(a) + " et b a pour valeur " + str(b) + "." 
>>> chaine
'a a pour valeur 5 et b a pour valeur 6.'

Exercice 1

Écrire un corps possible pour la fonction

def repeter(ch, effectif):
    """
    ch -- de type str
    effectif -- entier, >0

    renvoie la chaîne constituée de effectif concaténation de ch.
    >>> repeter('*', 3)
    '***'
    >>> repeter('cou', 2)
    'coucou'
    """

Attention

Encore le principe accumulateur !

Un code possible
def repeter(ch, effectif):
    """
    ch -- de type str
    effectif -- entier, >0

    renvoie la chaîne constituée de effectif concaténation de ch.
    >>> repeter('*', 3)
    '***'
    >>> repeter('cou', 2)
    'coucou'
    """
    resultat = ''
    for k in range(effectif):
        resultat = resultat + ch
    return resultat

Remarque. On peut écrire resultat += ch à la place de resultat = resultat + ch. A vous de décider laquelle des deux écritures vous préférez.

Exercice 2

Écrire un code possible pour le corps de la fonction suivante:

def etoile(n):
    """
    n -- entier naturel > 0

    renvoie une chaine triangle d'étoiles
    >>> print(etoile(3))
    *
    **
    ***
    >>> print(etoile(4))
    *
    **
    ***
    ****
    """

Attention

Utilisez la fonction de l'exercice précédent pour simplifier la tâche de celui-ci.

Ce conseil est un conseil de bonne pratique à respecter:
décomposer toute tâche en plus petites tâches réparties dans des fonctions.

Ce découpage en petites fonctions permet:

  • une meilleure lisibilité du code, le nom des fonctions étant choisi de façon à expliciter leur rôle.
  • une correction plus facile: chaque fonction peut être pensée séparément. Chacune ayant une petite tâche élémentaire, elle sera plus facile à concevoir et à corriger.

Passer à la ligne

On rappelle qu'un passage à la ligne s'obtient en ajoutant \n à la chaîne de caractères.

Un code possible

On utilise la fonction de l'exercice précédent.

def etoile(n):
    """
    n -- entier naturel > 0

    renvoie une chaine triangle d'étoiles
    >>> print(etoile(3))
    *
    **
    ***
    >>> print(etoile(4))
    *
    **
    ***
    ****
    """
    ch = ''
    for i in range(1, n+1):
        ch = ch + repeter('*', i) + "\n"
    return ch
Avec un f-string

Pour une version python >= 3.6:

def etoile(n):
    """
    n -- entier naturel > 0

    renvoie une chaine triangle d'étoiles
    >>> print(etoile(3))
    *
    **
    ***
    >>> print(etoile(4))
    *
    **
    ***
    ****
    """
    ch = ''
    for i in range(1, n+1):
        ch +=  f"{repeter('*', i)}\n"
    return ch