Aller au contenu

Astuces et patrons utiles

Cette page regroupe des astuces et des patrons de code que tu rencontreras fréquemment en programmation Python. Garde-la sous la main : elle te fera gagner du temps et de la clarté.


Au lieu de stocker la saisie dans une variable texte, puis de la convertir ensuite, tu peux tout faire en une seule ligne.

texte = input("Ton âge : ")
age = int(texte)
age = int(input("Ton âge : "))

L’appel à input() est imbriqué dans l’appel à int() (ou float(), bool(), etc). Python évalue d’abord l’expression la plus interne, puis passe le résultat à la fonction externe (qui l’enveloppe).


La fonction print() accepte plusieurs arguments séparés par des virgules. Par défaut, elle insère un espace entre chaque valeur.

nom = "Alice"
age = 20
moyenne = 87.5
print("Bonjour", nom, "! Tu as", age, "ans.")
print("Ta moyenne est de", format(moyenne, ".1f"), "/ 100")
Bonjour Alice ! Tu as 20 ans.
Ta moyenne est de 87.5 / 100

Deux opérateurs souvent méconnus mais très utiles.

OpérateurNomRésultat
//Division entièreLa partie entière du quotient
%ModuloLe reste de la division
print(17 // 5) # 3 (17 ÷ 5 = 3 reste 2). Équivalent à int(17 / 5)
print(17 % 5) # 2 (le reste)
if nombre % 2 == 0:
print("Pair")
if nombre % diviseur == 0:
print(nombre, "est divisible par", diviseur)
unites = nombre % 10
minutes = total_secondes // 60
secondes = total_secondes % 60
print(minutes, "min", secondes, "sec")

Python permet d’écrire une affectation conditionnelle sur une seule ligne.

variable = valeur_si_vrai if condition else valeur_si_faux
age = int(input("Ton âge : "))
if age >= 18:
statut = "majeur"
else:
statut = "mineur"
print("Tu es", statut)
age = int(input("Ton âge : "))
statut = "majeur" if age >= 18 else "mineur"
print("Tu es", statut)

Au lieu de répéter le nom de la variable, utilise les opérateurs raccourcis.

Forme longueRaccourci
x = x + 5x += 5
x = x - 1x -= 1
x = x * 2x *= 2
x = x / 3x /= 3
x = x // 2x //= 2
x = x % 10x %= 10
x = x ** 2x **= 2
compteur = 0
compteur += 1 # compteur vaut 1
compteur += 1 # compteur vaut 2
prix = 100
prix *= 1.15 # appliquer la taxe de 15%

Le patron accumulateur consiste à initialiser une variable avant une boucle, puis à l’enrichir à chaque itération.

somme = 0
n = int(input("Combien de notes ? "))
for i in range(n):
note = float(input("Note : "))
somme = somme + note
moyenne = somme / n
print("Moyenne :", format(moyenne, ".2f"))
produit = 1
for i in range(1, 6):
produit = produit * i
print("5! =", produit)
resultat = ""
n = int(input("Combien de mots ? "))
for i in range(n):
mot = input("Mot : ")
resultat = resultat + mot + " "
print("Phrase :", resultat)

On utilise une boucle while qui répète la question tant que la réponse ne satisfait pas la condition.

age = int(input("Ton âge (0-120) : "))
while age < 0 or age > 120:
print("Valeur invalide.")
age = int(input("Ton âge (0-120) : "))
print("Âge enregistré :", age)

On ajoute un compteur qui arrête la boucle après un nombre maximal d’essais.

MAX_ESSAIS = 3
essais = 0
age = int(input("Ton âge (0-120) : "))
essais = essais + 1
while (age < 0 or age > 120) and essais < MAX_ESSAIS:
print("Valeur invalide. Essai", essais, "/", MAX_ESSAIS)
age = int(input("Ton âge (0-120) : "))
essais = essais + 1
if age < 0 or age > 120:
print("Trop de tentatives. Au revoir.")
else:
print("Âge enregistré :", age)

8. Équivalence entre while et for pour un compteur

Section intitulée « 8. Équivalence entre while et for pour un compteur »

Les deux boucles suivantes produisent exactement le même résultat.

i = 0
while i < 5:
print(i)
i = i + 1
Aspectwhilefor
InitialisationManuelle (i = 0)Automatique (range)
Condition d’arrêtExplicite (i < 5)Implicite (fin du range)
IncrémentationManuelle (i = i + 1)Automatique
Risque de boucle infinieOui (si on oublie i = i + 1)Non

9. Vérifier une condition sur toute une séquence

Section intitulée « 9. Vérifier une condition sur toute une séquence »

Il arrive souvent de devoir vérifier qu’une condition est vraie pour chaque élément d’une séquence. Le patron utilise une variable drapeau (flag).

toutes_positives = True
for note in notes:
if note < 0:
toutes_positives = False
break
if toutes_positives:
print("Toutes les notes sont valides.")
else:
print("Au moins une note est négative.")

Vérifier qu’au moins un élément respecte la condition

Section intitulée « Vérifier qu’au moins un élément respecte la condition »
contient_negatif = False
for note in notes:
if note < 0:
contient_negatif = True
break
if contient_negatif:
print("Attention : note négative détectée.")

Peu de gens le savent : en Python, une boucle for peut avoir un bloc else. Ce bloc s’exécute seulement si la boucle s’est terminée normalement (sans break).

for note in notes:
if note < 0:
print("Note invalide détectée !")
break
else:
print("Toutes les notes sont valides.")

C’est une alternative élégante au patron drapeau vu précédemment.


11. Remplacer une série de conditions par une fonction

Section intitulée « 11. Remplacer une série de conditions par une fonction »

Quand un bloc if/elif se répète ou devient très long, c’est le signe qu’il faut extraire cette logique dans une fonction.

# ... début du programme ...
if imc < 18.5:
categorie = "Insuffisance pondérale"
elif imc < 25:
categorie = "Poids normal"
elif imc < 30:
categorie = "Surpoids"
else:
categorie = "Obésité"
print("Catégorie :", categorie)
# ... plus tard, même logique pour un autre patient ...
if imc2 < 18.5:
categorie2 = "Insuffisance pondérale"
# ... suite du programme
def categorie_imc(imc):
if imc < 18.5:
return "Insuffisance pondérale"
elif imc < 25:
return "Poids normal"
elif imc < 30:
return "Surpoids"
else:
return "Obésité"
# Utilisation simple et claire
print("Patient 1 :", categorie_imc(imc1))
print("Patient 2 :", categorie_imc(imc2))

Même si une portion de code n’est utilisée qu’une seule fois, l’extraire dans une fonction peut rendre le programme principal beaucoup plus clair.

n = int(input("Combien de notes ? "))
somme = 0
for i in range(n):
note = float(input("Note : "))
while note < 0 or note > 100:
print("Invalide (0-100).")
note = float(input("Note : "))
somme += note
moyenne = somme / n
if moyenne >= 90:
mention = "Excellent"
elif moyenne >= 75:
mention = "Très bien"
elif moyenne >= 60:
mention = "Satisfaisant"
else:
mention = "Échec"
print("Moyenne :", format(moyenne, ".1f"))
print("Mention :", mention)

Le programme fonctionne, mais il faut lire chaque ligne pour comprendre ce qu’il fait.

def saisir_note():
note = float(input("Note : "))
while note < 0 or note > 100:
print("Invalide (0-100).")
note = float(input("Note : "))
return note
def calculer_moyenne(n):
somme = 0
for i in range(n):
somme += saisir_note()
return somme / n
def determiner_mention(moyenne):
if moyenne >= 90:
return "Excellent"
elif moyenne >= 75:
return "Très bien"
elif moyenne >= 60:
return "Satisfaisant"
else:
return "Échec"
# Programme principal
n = int(input("Combien de notes ? "))
moyenne = calculer_moyenne(n)
mention = determiner_mention(moyenne)
print("Moyenne :", format(moyenne, ".1f"))
print("Mention :", mention)

Le programme principal tient maintenant en 5 lignes et se lit comme une recette :

  1. Demander le nombre de notes à saisir
  2. Calculer la moyenne des notes
  3. Déterminer la mention associée à la moyenne
  4. Afficher la moyenne et la mention.

Python permet l’échange simultané sans variable temporaire.

a = 5
b = 10
# Avec variable temporaire (classique)
temp = a
a = b
b = temp
# Échange simultané (Python)
a, b = b, a
print(a, b) # 10 5

La même syntaxe fonctionne pour échanger deux éléments d’une liste.

fruits = ["pomme", "banane", "cerise"]
# Avec variable temporaire
temp = fruits[0]
fruits[0] = fruits[2]
fruits[2] = temp
# Échange simultané
fruits[0], fruits[2] = fruits[2], fruits[0]
print(fruits) # ['cerise', 'banane', 'pomme']

Quand un programme ne fait pas ce que tu attends, ajoute des print() temporaires pour observer les valeurs pendant l’exécution.

somme = 0
for i in range(5):
somme += i
print("DEBUG — i:", i, "somme:", somme) # ← temporaire
# Quand tout fonctionne, supprime ou commente la ligne DEBUG