""" **Consignes :** 1. Écrivez une classe `Equipement` avec : - un constructeur `__init__(self, hostname, ip, latence_ms, actif=True)` ; - une méthode `__str__` renvoyant une description lisible ; - une méthode `est_operationnel(self, seuil_ms=100)` qui renvoie `True` si l'équipement est **actif ET** que sa latence est **sous le seuil**. 2. Écrivez une fonction `hotes_disponibles(bits_hote)` qui renvoie le nombre d'adresses **hôtes utilisables** d'un sous-réseau (indice : `2 ** bits - 2`). 3. Écrivez une fonction `trier_par_latence(equipements)` qui renvoie la liste triée par latence croissante (utilisez `sorted` + `lambda`). 4. Créez 3 équipements, affichez-les **triés par latence** avec leur état opérationnel, puis affichez le nombre d'hôtes d'un `/24` (soit 8 bits d'hôte). """ class Equipment(): def __init__(self, hostname:str, up:str, latency:float, active:bool=True): self.hostname = hostname self.up = up self.latency = latency self.active = active def __str__(self) -> str: if self.active: return f"=====\n \ HOST : {self.hostname}\n \ IS_UP : {self.up}\n \ LATENCY : {self.latency}" else: return f"=====\n \ Host is currently inactive." __repr__ = __str__ def is_operational(self, max_latency=100) -> bool: return self.active and self.latency < max_latency def available_host(host_bits): return f"{2 ** (32 - host_bits) - 2} hôtes sont disponibles sur {host_bits} bits." def sort_by_latency(equipments): return sorted(equipments, key=lambda e: e.latency) # Equipements e1 = Equipment("Berillium", "Yes", 15, True) e2 = Equipment("Thorium", "No", 7, False) e3 = Equipment("Cadmium", "Yes", 12.4, True) e4 = Equipment("Polonium", "Yes", 145, True) e5 = Equipment("Actinium", "Yes", 2.7, True) eX = [e1, e2, e3, e4, e5] for e in sort_by_latency(eX): if e.up == "Yes": print(e) print(available_host(24))