Apprendre la Programmation avec Python Moderne
Découvrez les concepts fondamentaux du langage (types stricts, boucles de validation, gestion des erreurs avec try/except, tuples d'appartenance et f-strings) à travers une étude décortiquée ligne par ligne d'un script moderne et irréprochable.
Le Code Python Moderne Intégral
Voici le script refactorisé selon les standards professionnels actuels. Chaque fonction est autonome, typée, documentée et sécurisée contre les saisies invalides.
def demander_nom() -> str:
reponse_nom = ""
while not reponse_nom:
reponse_nom = input("Quel est votre nom ? ").strip()
return reponse_nom
def demander_age(nom_personne: str) -> int:
age_int = 0
while age_int <= 0:
age_str = input(f"{nom_personne}, quel est votre âge ? ")
try:
age_int = int(age_str)
if age_int <= 0:
print("ERREUR : L'âge doit être supérieur à 0.")
except ValueError:
print("ERREUR : Vous devez rentrer un nombre entier pour l'âge.")
return age_int
def afficher_informations_personne(nom: str, age: int, taille: float = 0.0) -> None:
print(f"\nVous vous appelez {nom}, vous avez {age} ans.")
print(f"L'an prochain vous aurez {age + 1} ans.")
if age in (1, 2):
print("Vous êtes un bébé")
elif age < 10:
print("Vous êtes enfant")
elif age < 12:
print("Vous êtes mineur")
elif age == 17:
print("Vous êtes presque majeur")
elif age < 18:
print("Vous êtes adolescent")
elif age == 18:
print("Tout juste majeur : Félicitations !")
elif age > 60:
print("Vous êtes senior")
else:
print("Vous êtes majeur")
if taille > 0:
print(f"Votre taille : {taille:.2f} m")
if __name__ == "__main__":
NB_PERSONNES = 1
for _ in range(NB_PERSONNES):
nom = demander_nom()
age = demander_age(nom)
afficher_informations_personne(nom, age, 1.75)
Saisie du Nom & Évaluation Booléenne (Truthiness)
Comment s'assurer qu'un utilisateur entre un nom valide et non une chaîne vide ou remplie uniquement d'espaces.
def demander_nom() -> str:
reponse_nom = ""
while not reponse_nom:
reponse_nom = input("Quel est votre nom ? ").strip()
return reponse_nom
-> str Type Hints (Typage)
Indique explicitement aux développeurs et aux outils (PyCharm, VS Code, mypy) que cette fonction garantit de retourner une chaîne de caractères (str).
.strip() Nettoyage des blancs
Retire les espaces, tabulations ou sauts de ligne involontaires au début et à la fin. Si l'utilisateur tape " ", strip() le transforme en chaîne vide "".
while not La Truthiness Python
En Python, une chaîne vide "" est implicitement fausse (falsy). Donc not "" vaut True ! C'est la façon la plus concise et élégante d'écrire "tant que le nom est vide".
Saisie de l'Âge, Validation Stricte & try/except
La conversion d'une saisie utilisateur en entier est l'une des causes majeures de crash si elle n'est pas protégée.
def demander_age(nom_personne: str) -> int:
age_int = 0
while age_int <= 0:
age_str = input(f"{nom_personne}, quel est votre âge ? ")
try:
age_int = int(age_str)
if age_int <= 0:
print("ERREUR : L'âge doit être supérieur à 0.")
except ValueError:
print("ERREUR : Vous devez rentrer un nombre entier pour l'âge.")
return age_int
except ValueError: Capture ciblée
Règle d'or : Ne faites jamais un except: nu ! Attraper spécifiquement ValueError évite d'étouffer par accident des signaux système comme l'interruption clavier (Ctrl+C).
age_int <= 0 Validation sémantique
int("-5") se convertit sans lever d'erreur, mais un âge négatif est absurde. On double donc la vérification avec if age_int <= 0: pour continuer la boucle.
f"{nom_personne}..." f-strings dans l'input
Permet d'injecter directement la variable sans concaténation lourde avec +. C'est plus lisible et plus rapide.
Conditions Hiérarchisées, Tuples & Formatage Flottant
Une fonction pure d'affichage qui prend des paramètres, gère des cas mutuellement exclusifs et formate un nombre à virgule.
def afficher_informations_personne(nom: str, age: int, taille: float = 0.0) -> None:
print(f"\nVous vous appelez {nom}, vous avez {age} ans.")
print(f"L'an prochain vous aurez {age + 1} ans.")
if age in (1, 2):
print("Vous êtes un bébé")
elif age < 10:
print("Vous êtes enfant")
elif age < 12:
print("Vous êtes mineur")
elif age == 17:
print("Vous êtes presque majeur")
elif age < 18:
print("Vous êtes adolescent")
elif age == 18:
print("Tout juste majeur : Félicitations !")
elif age > 60:
print("Vous êtes senior")
else:
print("Vous êtes majeur")
if taille > 0:
print(f"Votre taille : {taille:.2f} m")
age in (1, 2) Appartenance au tuple
Remplace élégamment age == 1 or age == 2. La syntaxe in (val1, val2) est typiquement pythonique et se lit comme une phrase anglaise naturelle.
Ordre des elif Exclusivité descendante
Le bloc elif s'arrête dès la première condition vérifiée. Par exemple, si age = 17, il déclenche "presque majeur" et ne teste jamais age < 18 situé plus bas.
{taille:.2f} Format Specifier
Indique à Python d'arrondir et d'afficher le nombre flottant avec exactement 2 chiffres après la virgule (ex: 1.75 m, ou 1.80 au lieu de 1.8).
Le Point d'Entrée Standard if __name__ == "__main__":
Pourquoi tous les fichiers Python professionnels se terminent par cette condition incontournable.
if __name__ == "__main__":
NB_PERSONNES = 1
for _ in range(NB_PERSONNES):
nom = demander_nom()
age = demander_age(nom)
afficher_informations_personne(nom, age, 1.75)
__name__ == "__main__" Script vs Module
Si vous exécutez ce fichier directement (python script.py), __name__ prend la valeur "__main__" et le code s'exécute. Mais si un autre script importe vos fonctions (import script), le code de test ne s'exécutera pas intempestivement !
for _ in range(...) La variable jetable
Quand l'index de la boucle n'est pas utilisé dans le corps de celle-ci, la convention PEP 8 préconise de nommer la variable _ (underscore), signalant expressément son absence d'utilité ultérieure.
NB_PERSONNES Constante PEP 8
Les variables écrites entièrement en majuscules représentent des constantes de configuration. On ne doit jamais modifier leur valeur au cours de l'exécution.
Code Débutant (2020) vs Code Moderne (2026)
Pourquoi cette version modernisée est infiniment supérieure en production :
| Notion | Ancienne Pratique (Cours Débutant) | Pratique Moderne (Notre Code) | Bénéfice |
|---|---|---|---|
| Typage | def demander_nom(): | def demander_nom() -> str: | Auto-complétion IDE et détection statique des bugs. |
| Chaîne vide | while reponse_nom == "": | while not reponse_nom: | Truthiness idiomatique Python, capture aussi les espaces avec .strip(). |
| Exceptions | except: (nu) | except ValueError: | Ne bloque pas les signaux système (SIGINT, etc.). |
| Âges négatifs | while age_int == 0: | while age_int <= 0: | Rejette les âges négatifs impossibles comme -10. |
| Concaténation | nom + " a " + str(age) + " ans" | f"{nom} a {age} ans" | Plus lisible, plus rapide, conversion implicite sans str(). |
| Test multiple | if age == 1 or age == 2: | if age in (1, 2): | Syntaxe concise et expressive. |
Simulateur d'Exécution Interactif
Testez le comportement exact du code Python en modifiant les paramètres ci-dessous et en observant la sortie générée dans le terminal virtuel.
Quiz de Consolidation
while not reponse_nom: plutôt que while reponse_nom == "": ?"vingt" dans int(age_str) ?_ dans for _ in range(NB_PERSONNES): ?