""" R5.A.04 - Qualité Algorithmique TD Complexité cyclomatique - Partie Python Pour chaque fonction, calculez la complexité cyclomatique M. """ # Exercice P1 def celsius_vers_fahrenheit(celsius): return celsius * 9 / 5 + 32 # Exercice P2 def signe(x): if x > 0: return 1 elif x < 0: return -1 return 0 # Exercice P3 def notes_valides(notes): return [n for n in notes if 0 <= n <= 20] # Exercice P4 def mention(moyenne): mentions = {16: "Très bien", 14: "Bien", 12: "Assez bien", 10: "Passable"} for seuil, libelle in mentions.items(): if moyenne >= seuil: return libelle return "Ajourné" # Exercice P5 def categories_presentes(mdp): majuscule = minuscule = chiffre = special = False for c in mdp: if c.isupper(): majuscule = True elif c.islower(): minuscule = True elif c.isdigit(): chiffre = True else: special = True return majuscule, minuscule, chiffre, special def melange_casses(majuscule, minuscule): return majuscule and minuscule def contient_repetition(mdp): for i in range(len(mdp) - 2): if mdp[i] == mdp[i + 1] == mdp[i + 2]: return True return False def analyser_mot_de_passe(mdp, login=None): problemes = [] if len(mdp) < 12: problemes.append("trop court") majuscule, minuscule, chiffre, special = categories_presentes(mdp) if not melange_casses(majuscule, minuscule): problemes.append("mélanger majuscules et minuscules") if not chiffre: problemes.append("ajouter un chiffre") if not special: problemes.append("ajouter un caractère spécial") if login and login.lower() in mdp.lower(): problemes.append("ne pas contenir le login") if contient_repetition(mdp): problemes.append("éviter 3 caractères identiques") if not problemes: return "fort", [] return ("moyen" if len(problemes) <= 2 else "faible"), problemes if __name__ == "__main__": print(celsius_vers_fahrenheit(20), signe(-3), notes_valides([12, 25, -1, 8]), mention(13.5), analyser_mot_de_passe("Motdepasse123!", "maxime"))