diff --git a/saison-2/sources/refactorings/01_renommage_variable.py b/saison-2/sources/refactorings/01_renommage_variable.py new file mode 100644 index 0000000..2b0655c --- /dev/null +++ b/saison-2/sources/refactorings/01_renommage_variable.py @@ -0,0 +1,12 @@ +# Exercice: remplacer n, s et x avec de meilleurs noms +def calcule_moyenne(scores): + n = len(scores) + s = 0 + for x in scores: + s = s + x + return s / n + + +scores = [2, 3, 5, 4] +moyenne = calcule_moyenne(scores) +print(moyenne) diff --git a/saison-2/sources/refactorings/02_renommage_parametre.py b/saison-2/sources/refactorings/02_renommage_parametre.py new file mode 100644 index 0000000..83700e8 --- /dev/null +++ b/saison-2/sources/refactorings/02_renommage_parametre.py @@ -0,0 +1,9 @@ +# Exercice: remplacer le paramètre prénom +# par appellation +def dire_bonjour(prénom): + print("Bonjour " + prénom) + + +dire_bonjour("Alice") +prénom = "Bob" +dire_bonjour(prénom) diff --git a/saison-2/sources/refactorings/03_renommage_fonction.py b/saison-2/sources/refactorings/03_renommage_fonction.py new file mode 100644 index 0000000..d25c7fa --- /dev/null +++ b/saison-2/sources/refactorings/03_renommage_fonction.py @@ -0,0 +1,17 @@ +# Exercice: renommer demander_si_ca_va() en +# demander_des_nouvelles() et être_poli() +# en démarrer_conversation() +def dire_bonjour(appelation): + print("Bonjour", appelation) + + +def demander_si_ca_va(): + print("Ça va?") + + +def être_poli(appelation): + dire_bonjour(appelation) + demander_si_ca_va() + + +être_poli("Jeanne") diff --git a/saison-2/sources/refactorings/04_liste_par_comprehension.py b/saison-2/sources/refactorings/04_liste_par_comprehension.py new file mode 100644 index 0000000..45f513b --- /dev/null +++ b/saison-2/sources/refactorings/04_liste_par_comprehension.py @@ -0,0 +1,10 @@ +# Exercice: remplacer le corps de la fonction +# par une liste par intention +def liste_des_carrés(n): + résultat = [] + for i in range(n): + résultat.append(i * i) + return résultat + + +print(liste_des_carrés(5)) diff --git a/saison-2/sources/refactorings/05_liste_par_intension.py b/saison-2/sources/refactorings/05_liste_par_intension.py new file mode 100644 index 0000000..71cf799 --- /dev/null +++ b/saison-2/sources/refactorings/05_liste_par_intension.py @@ -0,0 +1,12 @@ +# Exercice: remplacer le corps de la fonction +# par une liste en compréhension +def garde_les_positifs(nombres): + résultat = [] + for nombre in nombres: + if nombre > 0: + résultat.append(nombre) + return résultat + + +nombres = [1, -3, 2, -5, 2, 4] +print(garde_les_positifs(nombres)) diff --git a/saison-2/sources/refactorings/06_extraction_sous_fonction.py b/saison-2/sources/refactorings/06_extraction_sous_fonction.py new file mode 100644 index 0000000..fa868f9 --- /dev/null +++ b/saison-2/sources/refactorings/06_extraction_sous_fonction.py @@ -0,0 +1,26 @@ +# Exercice: découper la fonction servir_le_thé() en trois +from cuisine import * + + +def servir_le_thé(): + # Faire bouillir l'eau + allumer_bouilloire() + attendre_que_ca_bout() + eteindre_bouilloire() + + # Remplir une tasse + ouvrir_placard() + prendre_une_tasse() + mettre_eau_dans_tasse() + mettre_thé_dans_tasse() + attendre_que_ca_infuse() + fermer_placard() + + # Servir sur un plateau + prendre_un_plateau() + mettre_tasse_sur_plateau() + mettre_sucrière_sur_plateau() + apporter_le_plateau() + + +servir_le_thé() diff --git a/saison-2/sources/refactorings/07_extraction_variable_condition.py b/saison-2/sources/refactorings/07_extraction_variable_condition.py new file mode 100644 index 0000000..fa3bfff --- /dev/null +++ b/saison-2/sources/refactorings/07_extraction_variable_condition.py @@ -0,0 +1,20 @@ +# Exercice: rendre la fonction peut_voter() plus lisible +# et plus explicite +class Personne: + def __init__(self, age, nationalité, inscrite): + self.age = age + self.nationalité = nationalité + self.inscrite = inscrite + + +def peut_voter(personne): + return ( + personne.age >= 18 and personne.nationalité == "Française" and personne.inscrite + ) + + +martine = Personne(42, "Française", True) +assert peut_voter(martine) + +kevin = Personne(12, "Française", True) +assert not peut_voter(kevin) diff --git a/saison-2/sources/refactorings/08_sortie_rapide.py b/saison-2/sources/refactorings/08_sortie_rapide.py new file mode 100644 index 0000000..a6c1fd3 --- /dev/null +++ b/saison-2/sources/refactorings/08_sortie_rapide.py @@ -0,0 +1,18 @@ +# Exercice: se débarrasser des ifs imbriqués +def controlle_conducteur(*, sobre, accompagné, permis): + if sobre: + if permis: + return True + else: + if accompagné: + return True + else: + return False + else: + return False + + +assert controlle_conducteur(sobre=True, accompagné=False, permis=True) +assert controlle_conducteur(sobre=True, accompagné=True, permis=False) +assert not controlle_conducteur(sobre=True, accompagné=False, permis=False) +assert not controlle_conducteur(sobre=False, accompagné=False, permis=True) diff --git a/saison-2/sources/refactorings/09_if_else_vs_dico.py b/saison-2/sources/refactorings/09_if_else_vs_dico.py new file mode 100644 index 0000000..6cee17a --- /dev/null +++ b/saison-2/sources/refactorings/09_if_else_vs_dico.py @@ -0,0 +1,13 @@ +# Exercice: remplacer tous les if/else +# avec un dictionnaire +def conversion(mesure, unité): + if unité == "m": + return mesure + elif unité == "km": + return mesure * 1000 + elif unité == "miles": + return mesure * 1609 + + +print("3 km =", conversion(3, "km"), "m") +print("2 miles =", conversion(2, "miles"), "m") diff --git a/saison-2/sources/refactorings/10_double_negation.py b/saison-2/sources/refactorings/10_double_negation.py new file mode 100644 index 0000000..74121d1 --- /dev/null +++ b/saison-2/sources/refactorings/10_double_negation.py @@ -0,0 +1,10 @@ +# Exercice: ne pas utiliser la double négation +def faire_le_café(sans_sucre): + if not sans_sucre: + print("avec du sucre") + else: + print("sans sucre") + + + faire_le_café(sans_sucre=True) + faire_le_café(sans_sucre=False) diff --git a/saison-2/sources/refactorings/11_fonctions_vs_méthodes.py b/saison-2/sources/refactorings/11_fonctions_vs_méthodes.py new file mode 100644 index 0000000..deef664 --- /dev/null +++ b/saison-2/sources/refactorings/11_fonctions_vs_méthodes.py @@ -0,0 +1,27 @@ +# Exercice: introduire une classe Article +# pour éviter la répétition de paramètres +# titre, contenu, lien, résumé +def crée_page_web(titre, contenu): + print("création de la page web") + slug = titre.lower().replace(" ", "-") + return "https://blog.e2li/" + slug + + +def envoi_email(titre, résumé, lien): + print("envoi email à propos de", titre) + + +def envoi_tweet(titre, résumé, lien): + print("envoi tweet à propos de", titre) + + +def publie_article(titre, résumé, contenu): + lien = crée_page_web(titre, contenu) + envoi_email(titre, résumé, lien) + envoi_tweet(titre, résumé, lien) + + +titre = "Un super titre" +résumé = "Un super résumé" +contenu = "Du contenu de qualité" +publie_article(titre, résumé, contenu) diff --git a/saison-2/sources/refactorings/12_dataclass_vs_paramètres.py b/saison-2/sources/refactorings/12_dataclass_vs_paramètres.py new file mode 100644 index 0000000..38b32b0 --- /dev/null +++ b/saison-2/sources/refactorings/12_dataclass_vs_paramètres.py @@ -0,0 +1,39 @@ +# Exercice: introduire une classe Commande pour +# éviter las répétition des paramètres +# allongé, noisette et sans_sucre +from cuisine import * + + +def commande_café(allongé, noisette, sans_sucre): + print("Je voudrais un café", end=" ") + if allongé: + print("allongé", end=" ") + else: + print("serré", end=" ") + if noisette: + print("noisette", end=" ") + if sans_sucre: + print("sans sucre", end=" ") + print() + + faire_le_café(allongé, noisette, sans_sucre) + servir_café() + + +def faire_le_café(allongé, noisette, sans_sucre): + avec_sucre = not sans_sucre + if allongé: + rajouter_eau() + if noisette: + rajouter_lait() + if avec_sucre: + rajouter_sucre() + + +def servir_café(): + print("voici") + + +commande_café(False, False, False) +commande_café(False, True, False) +commande_café(True, True, False) diff --git a/saison-2/sources/refactorings/cuisine.py b/saison-2/sources/refactorings/cuisine.py new file mode 100644 index 0000000..7247869 --- /dev/null +++ b/saison-2/sources/refactorings/cuisine.py @@ -0,0 +1,90 @@ +# Rien à changer ici :) +import time + + +def pause(f): + def res(): + f() + time.sleep(0.3) + + return res + + +@pause +def allumer_bouilloire(): + print("Bouilloire allumée") + + +@pause +def ouvrir_placard(): + print("Placard ouvert") + + +@pause +def fermer_placard(): + print("Placard fermé") + + +@pause +def attendre_que_ca_bout(): + print("...") + + +@pause +def eteindre_bouilloire(): + print("Bouilloire éteinte") + + +@pause +def prendre_une_tasse(): + print("Tasse en main") + + +@pause +def mettre_eau_dans_tasse(): + print("Versement de l'eau dans la tasse") + + +@pause +def mettre_thé_dans_tasse(): + print("Ajout du thé dans la tasse") + + +@pause +def attendre_que_ca_infuse(): + print("...") + + +@pause +def prendre_un_plateau(): + print("Plateau en main") + + +@pause +def mettre_tasse_sur_plateau(): + print("Le plateau contient une tasse") + + +@pause +def mettre_sucrière_sur_plateau(): + print("Le plateau contient une sucrière") + + +@pause +def apporter_le_plateau(): + print("Le plateau arrive sur la table") + + +@pause +def rajouter_eau(): + print("Rajouter eau") + + +@pause +def rajouter_lait(): + print("Rajouter lait") + + +@pause +def rajouter_sucre(): + print("Rajouter sucre")