from decimal import Decimal, InvalidOperation, ROUND_HALF_UP THRESHOLD = Decimal('200.00') def read_amount(prompt: str) -> Decimal | None: while True: s = input(prompt).strip().replace(',', '.') if s == '': print("Entrée vide — réessaie.") continue try: d = Decimal(s) except InvalidOperation: print("Montant invalide — entre un nombre.") continue if d < 0: print("Le montant ne peut pas être négatif.") continue if d == 0: return None return d.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) def afficher_stats(montants: list[Decimal]) -> None: if not montants: print("\nAucun chèque saisi pour le moment.\n") return count = len(montants) total = sum(montants) moyenne = (total / count).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) bas = [m for m in montants if m < THRESHOLD] haut = [m for m in montants if m >= THRESHOLD] bas_count, bas_total = len(bas), sum(bas) if bas else Decimal('0.00') haut_count, haut_total = len(haut), sum(haut) if haut else Decimal('0.00') min_montant = min(montants) max_montant = max(montants) print("\n--- Récapitulatif ---") print(f"Nombre de chèques : {count}") print(f"Montant total : {total} €") print(f"Moyenne des montants : {moyenne} €") print(f"Chèques < {THRESHOLD} € : {bas_count} (total = {bas_total} €)") print(f"Chèques >= {THRESHOLD} € : {haut_count} (total = {haut_total} €)") print(f"Chèque le plus petit : {min_montant} €") print(f"Chèque le plus grand : {max_montant} €\n") def main(): montants: list[Decimal] = [] print("Saisie des chèques — entre 0 pour terminer.") while True: montant = read_amount("Montant du chèque en € (0 pour terminer) : ") if montant is None: break montants.append(montant) afficher_stats(montants) if __name__ == "__main__": main()