181 lines
4.6 KiB
Markdown
181 lines
4.6 KiB
Markdown
|
|
# 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/)
|