All guides
IntermediateSelf-pacedFree GuideSection 16/95

Python — Boucles, conditions et fonctions

Practise development foundations: programming, web, APIs, data and AI tools. Work through sections and exercises to build your first projects.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and 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)
Quick Check

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

Quick Check

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

Quick Check

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

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.