madamasterclass.com

📔 Les types construits

Exploration des types construits en python


Dans ce cours, nous allons explorer les types construits (ou composés) en Python. Ces structures de données fondamentales permettent de regrouper et d'organiser plusieurs éléments. Nous aborderons les listes, tuples, dictionnaires et ensembles, leurs caractéristiques et leurs cas d'utilisation.

Les types construits (ou composés) sont des structures de données fondamentales en Python qui permettent de regrouper et d'organiser plusieurs éléments. Contrairement aux types simples (int, float, str), ils peuvent contenir plusieurs valeurs et offrent des méthodes spécialisées pour leur manipulation.

Les types construits en Python

1. Les listes (list)
  • ✅ Collection ordonnée et mutable d'éléments.
  • ✅ Peut contenir des éléments de types différents.
  • ✅ Accès par index : ma_liste[0]
  • ✅ Exemple : fruits = ["pomme", "banane", "orange"]
   # Création et manipulation
   nombres = [1, 2, 3, 4, 5]
   nombres.append(6)  # Ajouter un élément
   nombres[0] = 10    # Modifier un élément
   print(len(nombres))  # Longueur : 6
   
2. Les tuples (tuple)
  • ✦ Définition : Collection ordonnée et immuable d'éléments.
  • ✦ Avantages :
    • 1️⃣ Plus rapide que les listes pour l'accès en lecture
    • 2️⃣ Peut servir de clé dans un dictionnaire
    • 3️⃣ Garantit l'intégrité des données
            coordonnees = (10, 20)
            couleurs = ("rouge", "vert", "bleu")
            # Tuple à un élément (attention à la virgule)
            singleton = (42,)
   
3. Les dictionnaires (dict)
  • ✦ Définition : Collection non ordonnée de paires clé-valeur.
  • ✦ Caractéristiques :
    • 1️⃣ Clés uniques et immuables
    • 2️⃣ Accès très rapide par clé
    • 3️⃣ Mutable (modifiable)
   etudiant = {
       "nom": "Martin",
       "âge": 20,
       "notes": [15, 18, 12]
   }
   print(etudiant["nom"])  # Accès par clé
   etudiant["ville"] = "Paris"  # Ajout
   
4. Les ensembles (set)
  • ✦ Définition : Collection non ordonnée d'éléments uniques.
  • ✦ Opérations : Union, intersection, différence.
   couleurs1 = {"rouge", "vert", "bleu"}
   couleurs2 = {"bleu", "jaune", "rouge"}
   # Intersection
   communes = couleurs1 & couleurs2  # {"rouge", "bleu"}
   # Union
   toutes = couleurs1 | couleurs2
   
5. Tableau comparatif
Type Ordonné Mutable Doublons Accès
Liste ✔️ Oui ✔️ Oui ✔️ Autorisés Par index
Tuple ✔️ Oui ❌ Non ✔️ Autorisés Par index
Dictionnaire ✔️ Oui (Python 3.7+) ✔️ Oui ❌ Clés uniques Par clé
Ensemble ❌ Non ✔️ Oui ❌ Interdits Itération uniquement
6. Quand utiliser chaque type ?
  • ✅️ Liste : Séquence modifiable d'éléments (historique, panier d'achats).
   taches = ["réviser", "faire courses", "appeler médecin"]
   taches.append("lire livre")  # Ajout facile
   
  • ✅️ Tuple : Données immuables structurées (coordonnées, RGB).
   point_3d = (10, 20, 30)
   couleur_rgb = (255, 128, 0)
   
  • ✅️ Dictionnaire : Association clé-valeur (base de données simple).
   inventaire = {"pommes": 50, "poires": 30, "bananes": 20}
   
  • ✅️ Ensemble : Collection d'éléments uniques (tags, catégories).
   langages = {"Python", "Java", "C++", "Python"}  # Pas de doublon
   print(len(langages))  # 3
   
7. Conversions entre types
  • ✦ Liste ↔ Tuple :
   ma_liste = [1, 2, 3]
   mon_tuple = tuple(ma_liste)  # (1, 2, 3)
   nouvelle_liste = list(mon_tuple)  # [1, 2, 3]
   
  • ✦ Liste/Tuple → Ensemble :
   nombres = [1, 2, 2, 3, 3, 3]
   uniques = set(nombres)  # {1, 2, 3}
   
  • ✦ Dictionnaire → Listes :
   data = {"a": 1, "b": 2}
   cles = list(data.keys())     # ["a", "b"]
   valeurs = list(data.values()) # [1, 2]
   
8. Conclusion

Vous maîtrisez maintenant les types construits en Python. Ces structures sont essentielles pour organiser et manipuler des données complexes. Chaque type a ses particularités et ses cas d'usage privilégiés. Le choix dépendra de vos besoins spécifiques en termes de mutabilité, d'ordre et de performance.

Types construits en Python

Exercice 1: ★ ★ ☆ ☆ ☆

Vous devez gérer une liste de courses pour un supermarché.
1. Créez une liste `courses` contenant : "pain", "lait", "œufs", "beurre".
2. Ajoutez "fromage" à la fin de la liste.
3. Insérez "pommes" en deuxième position (index 1).
4. Supprimez "œufs" de la liste.
5. Affichez la liste finale et sa longueur.

# 1. Création de la liste initiale
courses = ["pain", "lait", "œufs", "beurre"]
print("Liste initiale :", courses)

# 2. Ajout de "fromage" à la fin
courses.append("fromage")
print("Après ajout de fromage :", courses)

# 3. Insertion de "pommes" en position 1
courses.insert(1, "pommes")
print("Après insertion de pommes :", courses)

# 4. Suppression de "œufs"
courses.remove("œufs")
print("Après suppression des œufs :", courses)

# 5. Affichage final
print("Liste finale :", courses)
print("Longueur :", len(courses))
Résultat :
Liste initiale : ['pain', 'lait', 'œufs', 'beurre']
Après ajout de fromage : ['pain', 'lait', 'œufs', 'beurre', 'fromage']
Après insertion de pommes : ['pain', 'pommes', 'lait', 'œufs', 'beurre', 'fromage']
Après suppression des œufs : ['pain', 'pommes', 'lait', 'beurre', 'fromage']
Liste finale : ['pain', 'pommes', 'lait', 'beurre', 'fromage']
Longueur : 5


Exercice 2: ★ ★ ★ ☆ ☆

Vous travaillez avec des coordonnées géographiques et des informations d'utilisateurs.
1. Créez un tuple `coordonnees` représentant Paris : (48.8566, 2.3522).
2. Créez un dictionnaire `utilisateur` avec les clés : "nom", "âge", "ville", "coordonnees".
3. Ajoutez une clé "email" au dictionnaire.
4. Modifiez l'âge de l'utilisateur.
5. Affichez toutes les clés et toutes les valeurs du dictionnaire.
6. Tentez de modifier les coordonnées directement (que se passe-t-il ?).

# 1. Création du tuple coordonnées
coordonnees = (48.8566, 2.3522)
print("Coordonnées de Paris :", coordonnees)

# 2. Création du dictionnaire utilisateur
utilisateur = {
    "nom": "Dupont",
    "âge": 25,
    "ville": "Paris",
    "coordonnees": coordonnees
}
print("Utilisateur initial :", utilisateur)

# 3. Ajout d'une clé email
utilisateur["email"] = "dupont@email.com"
print("Après ajout email :", utilisateur)

# 4. Modification de l'âge
utilisateur["âge"] = 26
print("Après modification âge :", utilisateur)

# 5. Affichage des clés et valeurs
print("Clés :", list(utilisateur.keys()))
print("Valeurs :", list(utilisateur.values()))

# 6. Tentative de modification des coordonnées
try:
    coordonnees[0] = 50.0  # Erreur : les tuples sont immuables
except TypeError as e:
    print("Erreur :", e)
    print("Les tuples sont immuables, on ne peut pas les modifier.")
Résultat :
Coordonnées de Paris : (48.8566, 2.3522)
Utilisateur initial : {'nom': 'Dupont', 'âge': 25, 'ville': 'Paris', 'coordonnees': (48.8566, 2.3522)}
Après ajout email : {'nom': 'Dupont', 'âge': 25, 'ville': 'Paris', 'coordonnees': (48.8566, 2.3522), 'email': 'dupont@email.com'}
Après modification âge : {'nom': 'Dupont', 'âge': 26, 'ville': 'Paris', 'coordonnees': (48.8566, 2.3522), 'email': 'dupont@email.com'}
Clés : ['nom', 'âge', 'ville', 'coordonnees', 'email']
Valeurs : ['Dupont', 26, 'Paris', (48.8566, 2.3522), 'dupont@email.com']
Erreur : 'tuple' object does not support item assignment
Les tuples sont immuables, on ne peut pas les modifier.


Exercice 3: ★ ★ ★ ★ ☆

Vous analysez les visiteurs d'un site web et leurs langages de programmation favoris.
1. Créez deux ensembles : `langages_2023` = {"Python", "JavaScript", "Java", "C++", "Go"} et `langages_2024` = {"Python", "JavaScript", "TypeScript", "Rust", "Go"}.
2. Trouvez les langages communs aux deux années.
3. Trouvez les langages qui ont disparu en 2024.
4. Trouvez les nouveaux langages de 2024.
5. Trouvez tous les langages mentionnés sur les deux années.
6. Vérifiez si "Python" est toujours populaire en 2024.

# 1. Création des ensembles
langages_2023 = {"Python", "JavaScript", "Java", "C++", "Go"}
langages_2024 = {"Python", "JavaScript", "TypeScript", "Rust", "Go"}

print("Langages 2023 :", langages_2023)
print("Langages 2024 :", langages_2024)

# 2. Langages communs (intersection)
communs = langages_2023 & langages_2024
# Ou : communs = langages_2023.intersection(langages_2024)
print("Langages communs :", communs)

# 3. Langages disparus en 2024 (différence)
disparus = langages_2023 - langages_2024
# Ou : disparus = langages_2023.difference(langages_2024)
print("Langages disparus :", disparus)

# 4. Nouveaux langages de 2024
nouveaux = langages_2024 - langages_2023
print("Nouveaux langages 2024 :", nouveaux)

# 5. Tous les langages (union)
tous_langages = langages_2023 | langages_2024
# Ou : tous_langages = langages_2023.union(langages_2024)
print("Tous les langages :", tous_langages)

# 6. Vérification de la présence de Python
python_populaire = "Python" in langages_2024
print("Python toujours populaire en 2024 :", python_populaire)

# Statistiques
print(f"Nombre de langages en 2023 : {len(langages_2023)}")
print(f"Nombre de langages en 2024 : {len(langages_2024)}")
print(f"Nombre total de langages différents : {len(tous_langages)}")
Résultat :
Langages 2023 : {'Go', 'C++', 'Java', 'JavaScript', 'Python'}
Langages 2024 : {'TypeScript', 'Go', 'Rust', 'JavaScript', 'Python'}
Langages communs : {'Go', 'JavaScript', 'Python'}
Langages disparus : {'C++', 'Java'}
Nouveaux langages 2024 : {'TypeScript', 'Rust'}
Tous les langages : {'TypeScript', 'Go', 'C++', 'Java', 'Rust', 'JavaScript', 'Python'}
Python toujours populaire en 2024 : True
Nombre de langages en 2023 : 5
Nombre de langages en 2024 : 5
Nombre total de langages différents : 7


Exercice 4: ★ ★ ★ ★ ☆

Vous gérez un inventaire de produits avec leurs prix et quantités.
1. Créez un dictionnaire `inventaire` avec les produits : "pommes": (2.5, 50), "bananes": (1.8, 30), "oranges": (3.0, 25).
2. Calculez la valeur totale de l'inventaire (prix × quantité pour chaque produit).
3. Trouvez le produit le plus cher et le moins cher.
4. Ajoutez 20 pommes à l'inventaire.
5. Créez une liste des produits dont la quantité est inférieure à 30.
6. Convertissez les clés du dictionnaire en ensemble et affichez-le.

# 1. Création de l'inventaire (produit: (prix, quantité))
inventaire = {
    "pommes": (2.5, 50),
    "bananes": (1.8, 30),
    "oranges": (3.0, 25)
}
print("Inventaire initial :", inventaire)

# 2. Calcul de la valeur totale
valeur_totale = 0
for produit, (prix, quantite) in inventaire.items():
    valeur_produit = prix * quantite
    print(f"{produit}: {prix}€ × {quantite} = {valeur_produit}€")
    valeur_totale += valeur_produit

print(f"Valeur totale de l'inventaire : {valeur_totale}€")

# 3. Produit le plus cher et le moins cher
prix_max = max(inventaire.values(), key=lambda x: x[0])
prix_min = min(inventaire.values(), key=lambda x: x[0])

# Trouver les noms des produits
produit_plus_cher = [k for k, v in inventaire.items() if v[0] == prix_max[0]][0]
produit_moins_cher = [k for k, v in inventaire.items() if v[0] == prix_min[0]][0]

print(f"Produit le plus cher : {produit_plus_cher} ({prix_max[0]}€)")
print(f"Produit le moins cher : {produit_moins_cher} ({prix_min[0]}€)")

# 4. Ajout de 20 pommes
ancien_prix, ancienne_quantite = inventaire["pommes"]
inventaire["pommes"] = (ancien_prix, ancienne_quantite + 20)
print("Après ajout de 20 pommes :", inventaire["pommes"])

# 5. Produits avec quantité < 30
produits_faible_stock = []
for produit, (prix, quantite) in inventaire.items():
    if quantite < 30:
        produits_faible_stock.append(produit)

print("Produits avec stock < 30 :", produits_faible_stock)

# 6. Conversion des clés en ensemble
ensemble_produits = set(inventaire.keys())
print("Ensemble des produits :", ensemble_produits)
print("Type :", type(ensemble_produits))
Résultat :
Inventaire initial : {'pommes': (2.5, 50), 'bananes': (1.8, 30), 'oranges': (3.0, 25)}
pommes: 2.5€ × 50 = 125.0€
bananes: 1.8€ × 30 = 54.0€
oranges: 3.0€ × 25 = 75.0€
Valeur totale de l'inventaire : 254.0€
Produit le plus cher : oranges (3.0€)
Produit le moins cher : bananes (1.8€)
Après ajout de 20 pommes : (2.5, 70)
Produits avec stock < 30 : ['oranges']
Ensemble des produits : {'oranges', 'bananes', 'pommes'}
Type : <class 'set'>


Exercice 5: ★ ★ ★ ★ ★

Vous analysez les résultats d'une enquête sur les préférences musicales. Vous avez une liste de votes où chaque vote est un tuple (âge, genre_musical).
1. Créez la liste `votes` avec : [(25, "rock"), (30, "pop"), (22, "rock"), (28, "jazz"), (35, "pop"), (27, "rock"), (40, "jazz")].
2. Créez un dictionnaire comptant le nombre de votes par genre musical.
3. Trouvez le genre musical le plus populaire.
4. Calculez l'âge moyen des votants pour chaque genre musical.
5. Créez un ensemble des âges uniques des votants.
6. Déterminez quels genres musicaux sont préférés par les personnes de moins de 30 ans.

# 1. Création de la liste des votes
votes = [(25, "rock"), (30, "pop"), (22, "rock"), (28, "jazz"), 
         (35, "pop"), (27, "rock"), (40, "jazz")]
print("Votes :", votes)

# 2. Comptage des votes par genre
comptage_genres = {}
for age, genre in votes:
    if genre in comptage_genres:
        comptage_genres[genre] += 1
    else:
        comptage_genres[genre] = 1

print("Comptage par genre :", comptage_genres)

# 3. Genre le plus populaire
genre_populaire = max(comptage_genres, key=comptage_genres.get)
max_votes = comptage_genres[genre_populaire]
print(f"Genre le plus populaire : {genre_populaire} ({max_votes} votes)")

# 4. Âge moyen par genre
ages_par_genre = {}
for age, genre in votes:
    if genre not in ages_par_genre:
        ages_par_genre[genre] = []
    ages_par_genre[genre].append(age)

print("Âge moyen par genre :")
for genre, ages in ages_par_genre.items():
    age_moyen = sum(ages) / len(ages)
    print(f"  {genre}: {age_moyen:.1f} ans")

# 5. Ensemble des âges uniques
ages_uniques = set()
for age, genre in votes:
    ages_uniques.add(age)

print("Âges uniques :", sorted(ages_uniques))

# 6. Genres préférés par les moins de 30 ans
genres_jeunes = set()
for age, genre in votes:
    if age < 30:
        genres_jeunes.add(genre)

print("Genres préférés par les moins de 30 ans :", genres_jeunes)

# Statistiques supplémentaires
print(f"\nStatistiques :")
print(f"Nombre total de votes : {len(votes)}")
print(f"Nombre de genres différents : {len(comptage_genres)}")
print(f"Âge minimum : {min(ages_uniques)}")
print(f"Âge maximum : {max(ages_uniques)}")

# Répartition par tranche d'âge
moins_30 = sum(1 for age, _ in votes if age < 30)
plus_30 = len(votes) - moins_30
print(f"Votants < 30 ans : {moins_30}")
print(f"Votants ≥ 30 ans : {plus_30}")
Résultat :
Votes : [(25, 'rock'), (30, 'pop'), (22, 'rock'), (28, 'jazz'), (35, 'pop'), (27, 'rock'), (40, 'jazz')]
Comptage par genre : {'rock': 3, 'pop': 2, 'jazz': 2}
Genre le plus populaire : rock (3 votes)
Âge moyen par genre :
rock: 24.7 ans
pop: 32.5 ans
jazz: 34.0 ans
Âges uniques : [22, 25, 27, 28, 30, 35, 40]
Genres préférés par les moins de 30 ans : {'rock', 'jazz'}

Statistiques :
Nombre total de votes : 7
Nombre de genres différents : 3
Âge minimum : 22
Âge maximum : 40
Votants < 30 ans : 4
Votants ≥ 30 ans : 3


Interprétation de l'espérance et de l'écart-type

Exercice 1: ★ ★ ★ ☆ ☆

Un vendeur de voitures gagne une commission qui suit la loi de probabilité suivante :

Commission (€)2005008001200
Probabilité0,40,30,20,1

1. Calculez l'espérance E(X) et l'écart-type σ(X).
2. Interprétez concrètement ces deux valeurs dans le contexte du problème.
3. Si le vendeur travaille 12 mois, quelle sera approximativement sa commission totale annuelle ?

1. Calcul de E(X) : \[ E(X) = 200 × 0,4 + 500 × 0,3 + 800 × 0,2 + 1200 × 0,1 = 80 + 150 + 160 + 120 = 510 \: euros \]
Calcul de E(X²) : \[ E(X²) = 200² × 0,4 + 500² × 0,3 + 800² × 0,2 + 1200² × 0,1 = 16000 + 75000 + 128000 + 144000 = 363000 \]
Calcul de V(X) et σ(X) : \[ V(X) = 363000 - 510² = 363000 - 260100 = 102900 \] \[ σ(X) = \sqrt{102900} ≈ 320,78 \: euros \]

2. Interprétation :
E(X) = 510€ : En moyenne, le vendeur gagne 510€ de commission par mois. C'est son revenu mensuel moyen attendu sur le long terme.
σ(X) ≈ 321€ : La commission varie typiquement d'environ 321€ autour de la moyenne. Cela indique une variabilité importante des revenus mensuels (de 189€ à 831€ environ dans 68% des cas).

3. Commission annuelle :
Commission totale attendue = 12 × 510€ = 6120€
L'écart-type annuel = √12 × 321€ ≈ 1111€
Le vendeur peut s'attendre à gagner environ 6120€ ± 1111€ par an.


Exercice 2: ★ ★ ★ ★ ☆

Deux machines A et B produisent des pièces. Le nombre de pièces défectueuses par lot de 100 suit les lois suivantes :
• Machine A : E(X_A) = 3, σ(X_A) = 1,5
• Machine B : E(X_B) = 2, σ(X_B) = 3
1. Comparez la qualité moyenne des deux machines.
2. Comparez la régularité de production des deux machines.
3. Si vous deviez choisir une machine pour une production en série, laquelle choisiriez-vous ? Justifiez.
4. Calculez le coefficient de variation pour chaque machine et interprétez.

1. Qualité moyenne :
• Machine A : En moyenne 3 pièces défectueuses par lot
• Machine B : En moyenne 2 pièces défectueuses par lot
Conclusion : La machine B a une meilleure qualité moyenne (moins de défauts).

2. Régularité de production :
• Machine A : σ = 1,5 → faible variabilité, production régulière
• Machine B : σ = 3 → forte variabilité, production irrégulière
Conclusion : La machine A est plus régulière et prévisible.

3. Choix de machine :
Pour une production en série : Je choisirais la machine A.
Justification : Bien qu'elle ait légèrement plus de défauts en moyenne, sa régularité est cruciale pour la planification et le contrôle qualité. La variabilité élevée de B rend la production imprévisible.

4. Coefficient de variation :
• Machine A : CV_A = σ/E(X) = 1,5/3 = 0,5 = 50%
• Machine B : CV_B = σ/E(X) = 3/2 = 1,5 = 150%
Interprétation : La machine B présente une variabilité relative 3 fois plus importante que A. Cela confirme que A est plus stable relativement à son niveau moyen de défauts.


Exercice 3: ★ ★ ★ ★ ★

Une compagnie d'assurance étudie les sinistres automobiles. Le montant des réparations X (en milliers d'euros) suit la loi :

Montant (k€)0,5251020
Probabilité0,60,250,10,040,01

1. Calculez E(X) et σ(X).
2. Interprétez ces valeurs pour la compagnie d'assurance.
3. Si la compagnie veut constituer une réserve pour couvrir 95% des sinistres, quel montant doit-elle prévoir par sinistre ?
4. Comparez cette situation avec une autre compagnie où E(Y) = 3 k€ et σ(Y) = 1 k€.

1. Calcul de E(X) : \[ E(X) = 0,5 × 0,6 + 2 × 0,25 + 5 × 0,1 + 10 × 0,04 + 20 × 0,01 = 0,3 + 0,5 + 0,5 + 0,4 + 0,2 = 1,9 k euros \]
Calcul de E(X²) : \[ E(X²) = 0,25 × 0,6 + 4 × 0,25 + 25 × 0,1 + 100 × 0,04 + 400 × 0,01 = 0,15 + 1 + 2,5 + 4 + 4 = 11,65 \]
Calcul de V(X) et σ(X) : \[ V(X) = 11,65 - 1,9² = 11,65 - 3,61 = 8,04 \] \[ σ(X) = \sqrt{8,04} ≈ 2,84 k euros \]

2. Interprétation pour l'assurance :
E(X) = 1,9k€ : Coût moyen par sinistre. C'est la base pour calculer les primes d'assurance.
σ(X) = 2,84k€ : Forte variabilité des coûts. L'écart-type est plus élevé que la moyenne, indiquant des sinistres très variables (beaucoup de petits sinistres et quelques gros).

3. Réserve pour 95% des sinistres :
En utilisant l'approximation E(X) + 2σ(X) ≈ 1,9 + 2 × 2,84 = 7,58k€
Interprétation : Une réserve de 7,6k€ par sinistre devrait couvrir environ 95% des cas.

4. Comparaison avec l'autre compagnie :
• Compagnie actuelle : E(X) = 1,9k€, σ(X) = 2,84k€, CV = 149%
• Autre compagnie : E(Y) = 3k€, σ(Y) = 1k€, CV = 33%
Analyse : L'autre compagnie a des sinistres plus coûteux en moyenne mais beaucoup plus prévisibles. Notre compagnie a des coûts moyens plus faibles mais un risque de variabilité beaucoup plus élevé.


Exercice 4: ★ ★ ★ ☆ ☆

Un restaurant étudie le temps d'attente des clients (en minutes). Les données donnent :
• Lundi : E(X) = 8 min, σ(X) = 2 min
• Vendredi : E(Y) = 12 min, σ(Y) = 6 min
1. Comparez la satisfaction client entre ces deux jours.
2. Quel jour présente le service le plus régulier ?
3. Si le restaurant veut garantir un temps d'attente maximal à 95% de ses clients, quelle limite doit-il afficher pour chaque jour ?
4. Le restaurant envisage d'embaucher un serveur supplémentaire le vendredi, ce qui réduirait les temps de 30%. Calculez les nouveaux paramètres et commentez.

1. Satisfaction client :
Lundi : Temps d'attente moyen de 8 minutes → satisfaction élevée
Vendredi : Temps d'attente moyen de 12 minutes → satisfaction plus faible
Conclusion : Les clients sont plus satisfaits le lundi grâce à un service plus rapide.

2. Régularité du service :
Lundi : σ = 2 min → service très régulier et prévisible
Vendredi : σ = 6 min → service irrégulier avec de fortes variations
Conclusion : Le lundi présente un service beaucoup plus régulier.

3. Temps d'attente garanti à 95% :
En utilisant E(X) + 2σ(X) :
Lundi : 8 + 2 × 2 = 12 minutes
Vendredi : 12 + 2 × 6 = 24 minutes
Affichage recommandé : "Temps d'attente max : 12 min (lundi), 24 min (vendredi)"

4. Avec un serveur supplémentaire le vendredi :
Réduction de 30% → multiplication par 0,7
• Nouveau E(Y) = 12 × 0,7 = 8,4 min
• Nouveau σ(Y) = 6 × 0,7 = 4,2 min
• Nouveau temps garanti : 8,4 + 2 × 4,2 = 16,8 min
Commentaire : L'embauche améliore significativement le temps moyen (proche du lundi) mais la variabilité reste élevée. Le service vendredi resterait moins prévisible qu'en début de semaine.


Exercice 5: ★ ★ ★ ★ ★

Deux investissements financiers A et B ont les rendements annuels suivants :
• Investissement A : E(R_A) = 6%, σ(R_A) = 8%
• Investissement B : E(R_B) = 10%, σ(R_B) = 20%
1. Comparez la rentabilité et le risque de ces investissements.
2. Calculez le ratio de Sharpe (rendement/risque) pour chaque investissement et interprétez.
3. Un investisseur prudent souhaite limiter ses pertes potentielles à 5% maximum. Quel investissement lui conseillez-vous ?
4. Si on combine 60% de A et 40% de B dans un portefeuille (en supposant l'indépendance), calculez les caractéristiques du portefeuille et commentez l'effet de diversification.

1. Rentabilité et risque :
Investissement A : Rentabilité modérée (6%) avec risque faible (8%)
Investissement B : Rentabilité élevée (10%) avec risque élevé (20%)
Principe : Plus le rendement espéré est élevé, plus le risque est important.

2. Ratio de Sharpe :
• Ratio A = E(R_A)/σ(R_A) = 6%/8% = 0,75
• Ratio B = E(R_B)/σ(R_B) = 10%/20% = 0,50
Interprétation : A offre un meilleur rendement par unité de risque (0,75 contre 0,50). A est plus efficace risk-adjusted.

3. Conseil pour investisseur prudent :
Pertes potentielles (approximation) : E(R) - 2σ(R)
• Investissement A : 6% - 2 × 8% = -10% (perte max ≈ 10%)
• Investissement B : 10% - 2 × 20% = -30% (perte max ≈ 30%)
Recommandation : Aucun des deux ne respecte la contrainte de 5% de perte maximum. Cependant, A est beaucoup moins risqué et se rapproche davantage de l'objectif.

4. Portefeuille mixte (60% A + 40% B) :
• E(Portefeuille) = 0,6 × 6% + 0,4 × 10% = 3,6% + 4% = 7,6%
• σ(Portefeuille) = √[(0,6)² × (8%)² + (0,4)² × (20%)²] = √[23,04 + 64] = √87,04 ≈ 9,33%
• Ratio de Sharpe = 7,6%/9,33% ≈ 0,81
Effet de diversification : Le portefeuille offre un rendement intermédiaire (7,6%) avec un risque réduit par rapport à B seul, et un meilleur ratio de Sharpe que chaque investissement pris séparément. La diversification améliore l'efficacité risk-return.

Forum(s) associé(s)

Page: