✨ Python 3.10+ / 3.12 / 3.13 • Meilleures Pratiques

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.

Type Hints Typage explicite (PEP 484)
Robuste Gestion d'exceptions ValueError
Pythonique Truthiness & f-strings élégantes
Référence Globale

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.

programme_moderne.py
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)
Module 1

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.

demander_nom() décortiquée
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".

Module 2

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.

demander_age() décortiqué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.

Module 3

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.

afficher_informations_personne() décortiquée
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).

Module 4

Le Point d'Entrée Standard if __name__ == "__main__":

Pourquoi tous les fichiers Python professionnels se terminent par cette condition incontournable.

Le bloc d'exécution
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.

Comparatif

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.
Expérimentation en direct

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.

Terminal — python3 programme.py
$ python3 programme_moderne.py [Prêt] Cliquez sur "Exécuter" pour lancer le programme avec vos paramètres.
Auto-Évaluation

Quiz de Consolidation

1. Pourquoi écrire while not reponse_nom: plutôt que while reponse_nom == "": ?
A) C'est obligatoire en Python 3, sinon le code plante.
B) C'est plus idiomatique en Python car une chaîne vide est considérée comme "falsy".
C) Pour forcer la variable à se transformer en nombre booléen.
2. Que se passe-t-il si un utilisateur entre le texte "vingt" dans int(age_str) ?
A) Python convertit automatiquement le mot en chiffre 20.
B) Python lève une exception ValueError, interceptée par notre bloc try / except.
C) La variable prend la valeur 0 sans générer d'erreur.
3. Pourquoi utilise-t-on _ dans for _ in range(NB_PERSONNES): ?
A) Par convention PEP 8, cela indique explicitement qu'on n'a pas besoin de l'index dans la boucle.
B) Pour que la boucle s'exécute deux fois plus vite.
C) C'est une obligation syntaxique avec les constantes en majuscules.