Tous les guides
IntermédiaireÀ votre rythmeGuide gratuitSection 16/95

Python — Boucles, conditions et fonctions

Pratiquez les fondations du développement : programmation, web, API, données et usages de l’IA. Des sections et exercices pour construire vos premiers projets.

💡

Contenu gratuit, accessible sans compte. Les outils et modèles évoluent : consultez le dossier actuel pour vérifier leurs versions. Modèles et sources

Section 11.1.16 : Python — Boucles, conditions et fonctions

🎯 Objectif pédagogique

Maîtriser les structures de contrôle et les fonctions en Python. Vous serez capable d'écrire des programmes structurés avec de la logique conditionnelle, des boucles, et des fonctions réutilisables.


La logique de programmation

Marc avait l'habitude des formules Excel imbriquées (IF, VLOOKUP, SUMPRODUCT). Bonne nouvelle : la logique de programmation est la même — seule la syntaxe change. Et elle est beaucoup plus lisible en Python.

Conditions

# if / elif / else
age = 34
experience_years = 0

if age < 25 and experience_years == 0:
    print("Junior débutant")
elif age >= 25 and experience_years == 0:
    print("Reconversion professionnelle")  # ← Marc
elif experience_years >= 5:
    print("Senior")
else:
    print("Intermédiaire")

# Conditions avec listes
skills = ["HTML", "CSS", "JavaScript", "Python"]

if "Python" in skills and len(skills) >= 4:
    print("Prêt pour la data science !")

# Opérateur ternaire
status = "Prêt" if len(skills) >= 4 else "En cours"

Boucles

# for — itérer sur une séquence
technologies = ["HTML", "CSS", "JavaScript", "Python", "Git"]

for tech in technologies:
    print(f"✅ \{tech\}")

# for avec range
for i in range(5):          # 0, 1, 2, 3, 4
    print(f"Itération \{i\}")

for i in range(1, 6):       # 1, 2, 3, 4, 5
    print(f"Semaine \{i\}")

# for avec enumerate (index + valeur)
for index, tech in enumerate(technologies, 1):
    print(f"\{index\}. \{tech\}")

# while — tant que la condition est vraie
attempts = 0
max_attempts = 3

while attempts < max_attempts:
    answer = input("Mot de passe : ")
    if answer == "secret":
        print("✅ Accès accordé")
        break
    attempts += 1
    print(f"❌ Essai \{attempts\}/\{max_attempts\}")
else:
    print("🔒 Compte bloqué")

# Compréhensions (très Pythonique)
# Liste
squares = [n**2 for n in range(10)]

# Avec filtre
even_squares = [n**2 for n in range(10) if n % 2 == 0]

# Dictionnaire
tech_lengths = \{tech: len(tech) for tech in technologies\}
# \{'HTML': 4, 'CSS': 3, 'JavaScript': 10, 'Python': 6, 'Git': 3\}

Fonctions

# Fonction basique
def greet(name):
    return f"Bonjour \{name\} !"

print(greet("Marc"))    # "Bonjour Marc !"

# Paramètres par défaut
def create_profile(name, age, role="Étudiant"):
    return \{
        "name": name,
        "age": age,
        "role": role
    \}

marc = create_profile("Marc", 34, "Reconversion")
student = create_profile("Alice", 22)   # role = "Étudiant"

# Retours multiples
def analyze_scores(scores):
    return min(scores), max(scores), sum(scores) / len(scores)

minimum, maximum, average = analyze_scores([85, 92, 78, 95, 88])
print(f"Min: \{minimum\}, Max: \{maximum\}, Moyenne: \{average:.1f\}")

# *args et **kwargs
def log_activity(user, *actions, **metadata):
    print(f"Utilisateur : \{user\}")
    for action in actions:
        print(f"  - \{action\}")
    for key, value in metadata.items():
        print(f"  [\{key\}] = \{value\}")

log_activity("Marc", "login", "view_module", "complete_quiz",
             timestamp="2026-03-17", duration="45min")

Gestion des erreurs

# try/except — capturer les erreurs
def safe_divide(a, b):
    try:
        result = a / b
        return result
    except ZeroDivisionError:
        print("❌ Division par zéro impossible")
        return None
    except TypeError:
        print("❌ Types invalides")
        return None
    finally:
        print("Opération terminée")

safe_divide(10, 0)      # ❌ Division par zéro impossible
safe_divide(10, 3)      # 3.333... + "Opération terminée"

# Application réelle : lecture de fichier
def read_config(filepath):
    try:
        with open(filepath, 'r') as f:
            return f.read()
    except FileNotFoundError:
        print(f"Fichier \{filepath\} introuvable")
        return None

with — le gestionnaire de contexte

with open() ouvre le fichier ET garantit qu'il sera fermé, même en cas d'erreur. C'est le pattern standard pour manipuler des fichiers, des connexions réseau, etc. Marc : "C'est comme verrouiller la porte en partant — automatiquement."

🏋️ Exercice pratique (25 minutes)

Créez un mini "tracker de bootcamp" en Python :

# bootcamp_tracker.py

def create_bootcamp():
    return \{
        "student": "Marc Dupont",
        "weeks": 5,
        "current_week": 1,
        "skills_per_week": \{\},
        "quizzes": []
    \}

def add_skills(bootcamp, week, skills):
    bootcamp["skills_per_week"][week] = skills
    print(f"✅ Semaine \{week\} : \{', '.join(skills)\}")

def add_quiz_result(bootcamp, quiz_name, score, total):
    bootcamp["quizzes"].append(\{
        "name": quiz_name,
        "score": score,
        "total": total,
        "percent": round(score / total * 100, 1)
    \})

def show_dashboard(bootcamp):
    print(f"\n\{'='*40\}")
    print(f"  BOOTCAMP TRACKER — \{bootcamp['student']\}")
    print(f"\{'='*40\}")
    
    # Progression
    progress = bootcamp["current_week"] / bootcamp["weeks"]
    bar = "█" * int(progress * 20) + "░" * (20 - int(progress * 20))
    print(f"\n  Progression : [\{bar\}] \{progress*100:.0f\}%")
    
    # Skills
    total_skills = sum(len(s) for s in bootcamp["skills_per_week"].values())
    print(f"  Skills totales : \{total_skills\}")
    
    # Quiz moyenne
    if bootcamp["quizzes"]:
        avg = sum(q["percent"] for q in bootcamp["quizzes"]) / len(bootcamp["quizzes"])
        print(f"  Moyenne quiz : \{avg:.1f\}%")
    
    print(f"\{'='*40\}")

# Utilisation
tracker = create_bootcamp()
add_skills(tracker, 1, ["HTML", "CSS", "JavaScript", "Python", "Git"])
add_quiz_result(tracker, "HTML Basics", 8, 10)
add_quiz_result(tracker, "CSS Flexbox", 7, 10)
add_quiz_result(tracker, "JS Variables", 9, 10)
show_dashboard(tracker)
Vérification rapide

Que fait la syntaxe 'for index, tech in enumerate(technologies, 1)' ?

Vérification rapide

Quel est le rôle du bloc 'finally' dans un try/except ?

Vérification rapide

Quelle est la manière 'pythonique' de créer une liste des carrés des nombres pairs de 0 à 9 ?

Votre progression

Cette progression est déclarative et conservée dans votre navigateur. L’attestation finale ne constitue pas un diplôme ni une évaluation indépendante.

Voir ma progression et mon attestation

Apprendre l’IA, du premier prompt aux agents

15 guides gratuitsQuiz, schémas et ateliersSans compte

Un cas pratique IA dans votre boîte mail

Méthodes, ressources et nouveaux exercices. Gratuit, avec désinscription à tout moment.