# Les f-strings L'activité consiste en un TD comprenant un __cours dirigé__ et des __exercices__ relatifs aux __f-strings__ en Python. ## Pré-requis Avoir effectué l'activité sur les [fonctions](../chapitre_4/) ## Consignes 1. Télécharger le fichier [TD.ipynb](./TD.ipynb), 2. Se rendre sur [Basthon](https://notebook.basthon.fr/), 3. Ouvrir le fichier TD.ipynb téléchargé, 4. Suivre le déroulé du TD, les réponses sont à mettre directement dans votre fichier, 5. À la fin de la séance, n'oubliez pas de sauvegarder votre fichier sur votre clé USB ou espace personnel. --------- ## Mémo — Les f-strings ### Pourquoi les f-strings ? Jusqu'ici, pour afficher une variable dans une phrase, on utilisait la **concaténation** ou la **virgule dans `print()`** : ```python prenom = "Alice" age = 17 # Méthode 1 : concaténation (fastidieuse) print("Bonjour " + prenom + ", tu as " + str(age) + " ans.") # Méthode 2 : virgule dans print (peu flexible) print("Bonjour", prenom, ", tu as", age, "ans.") ``` Les **f-strings** (introduites en Python 3.6) permettent d'écrire cela de façon bien plus lisible : ```python print(f"Bonjour {prenom}, tu as {age} ans.") # → Bonjour Alice, tu as 17 ans. ``` --- ### Syntaxe de base Une f-string est une chaîne de caractères précédée de la lettre `f`. Les **expressions entre accolades `{}`** sont évaluées et insérées dans la chaîne. ```python nom = "Bob" score = 142 message = f"Le joueur {nom} a obtenu {score} points." print(message) # → Le joueur Bob a obtenu 142 points. ``` On peut mettre **n'importe quelle expression** entre les accolades : ```python a = 5 b = 3 print(f"{a} + {b} = {a + b}") # → 5 + 3 = 8 print(f"Le double de {a} : {a * 2}") # → Le double de 5 : 10 print(f"Est-ce que {a} > {b} ? {a > b}") # → Est-ce que 5 > 3 ? True ``` --- ### Appel de fonctions dans une f-string ```python prenom = "alice" print(f"Bonjour {prenom.upper()} !") # → Bonjour ALICE ! print(f"Longueur : {len(prenom)}") # → Longueur : 5 ``` --- ### Formatage des nombres C'est l'un des points les plus utiles des f-strings. On ajoute un **format** après un `:` dans les accolades. #### Nombres décimaux — précision ```python pi = 3.14159265 print(f"{pi}") # → 3.14159265 (pas de format) print(f"{pi:.2f}") # → 3.14 (2 chiffres après la virgule) print(f"{pi:.4f}") # → 3.1416 (4 chiffres après la virgule) print(f"{pi:.0f}") # → 3 (0 chiffres, arrondi) ``` #### Largeur et alignement ```python nom = "Alice" print(f"|{nom:<10}|") # → |Alice | (aligné à gauche, largeur 10) print(f"|{nom:>10}|") # → | Alice| (aligné à droite) print(f"|{nom:^10}|") # → | Alice | (centré) ``` #### Nombres entiers — remplissage avec des zéros ```python numero = 7 print(f"Joueur n°{numero:03d}") # → Joueur n°007 ``` #### Combinaison : largeur ET précision ```python temperature = 18.5 print(f"Température : {temperature:6.1f} °C") # → Température : 18.5 °C ``` --- ### Tableau récapitulatif des formats | Format | Signification | Exemple | Résultat | |--------|--------------|---------|----------| | `:.2f` | 2 décimales | `f"{3.14159:.2f}"` | `3.14` | | `:d` | Entier | `f"{42:d}"` | `42` | | `:05d` | Entier, 5 chiffres, zéros | `f"{7:05d}"` | `00007` | | `:<10` | Aligné gauche, 10 chars | `f"{'a':<10}"` | `a ` | | `:>10` | Aligné droite, 10 chars | `f"{'a':>10}"` | ` a` | | `:^10` | Centré, 10 chars | `f"{'a':^10}"` | ` a ` | --- ### Exemple complet : tableau de résultats ```python resultats = [ ("Alice", 17.5, 1), ("Bob", 14.0, 2), ("Carla", 15.75, 3), ] print(f"{'Nom':<10} {'Note':>6} {'Rang':>5}") print("-" * 25) for nom, note, rang in resultats: print(f"{nom:<10} {note:>6.2f} {rang:>5}") ``` Affiche : ``` Nom Note Rang ------------------------- Alice 17.50 1 Bob 14.00 2 Carla 15.75 3 ``` --- ### Erreurs fréquentes ```python # ERREUR : oublier le f devant la chaîne prenom = "Alice" print("{prenom}") # → {prenom} (littéral, pas de substitution !) print(f"{prenom}") # → Alice (correct) # ERREUR : accolades sans contenu valide print(f"{}") # SyntaxError # ERREUR : mettre des guillemets identiques à l'intérieur # print(f"{"Alice"}") # SyntaxError — utiliser des guillemets différents print(f"{'Alice'}") # → Alice (guillemets simples à l'intérieur) ``` --------- ## Pour aller plus loin Une fois le TD __fini__ et __validé__, vous pouvez effectuer l'[activité suivante](../chapitre_6/)