Ce document est un .txt à ouvrir dans VS Code. On peut aussi le tranformer en .py et l'ouvrir dans sublime texte pour avoir de la coloration syntaxique. (Avec VS Code, en .py, tout passe en rouge !) Cmd-A puis Cmd-k-0 : pour avoir le plan 2 cours python : python de base + données de base Le vocabulaire à maitriser (44 notions): python de base (18 notions) variable, type, int, float, string, bool (6) test, boucle while, break, fonction, return (6) print, input (2) commentaires # et ''' (2) try, except (2) Données de base (25 notions) string, liste, len (3) split, join (2) max, min, in, count, replace (5) boucles for, range (3) import (1) slice (1) dictionnaire, (1) lecture de fichier, excel et CSV, f-string (3) ensemble, tuple, destructuration (3) matrice (1) API, JSON (2) Chaque cours est associé à des exercices à faire : vous pouvez vous mettre en binome pour les faire. Cours 1 : Python de base (21 notions) : Exemples série 1: input, print, variable, int, float, string, isnumric(), int(), type, try, except, if, commentaires a=input("a:") print(a) b=input("b:") print(type(b)) print(b) entier = input("entier:") # essayer avec autre chose qu'un entier entier = int(entier) print(type(entier)) print(entier) entier = input("entier:") if entier.isnumeric(): # isnumeric ne reconnait que les entiers positifs. entier = int(entier) resultat = 3*entier print("entier:", entier, "resultat:", résultat) nombre = input("nombre:") try: # avec le try, le isnumeric() n'est plus utile nombre=int(nombre) resultat = 2 * nombre except: print(nombre, "n'est pas un entier") if type(nombre) == str: try: nombre=float(nombre) resultat = 2 * nombre except: print(nombre, "n'est pas un float") if type(nombre) == str: resultat = 2 * nombre print("nombre:", nombre, "résultat:", resultat) Exercices série 1 : testez l''exemple précédent. Faites le "planter". Ecrivez un code sans fonction qui permet de lire les coefficient a et b de l''équation aX+b = 0 et qui affiche le résultat (1 solution : -b/a, ou une infinité de solution quand a=b=0, ou 0 solution quand a=0 et b!=0). On vérifiera que a et b sont bien des numériques. Exemples série 2: else, fonction, return, bool Année bissextile : annee=input("année:") if annee.isnumeric(): if annee % 4 == 0: print(annee, "est bissextile") else: print(annee, "n'est pas bissextile") Sous forme de fonction : def bissextile(annne): if annee % 4 == 0: return True else : return False Le "programme principal" = le "main" utilise la fonction annee=int(input("année:")) if bissextile(annee) == True: print(annee, "est bissextile") else: print(annee, "n'est pas bissextile") Ecriture complète propre : # ------------------- # les fonctions # ------------------- def bissextile(annne): if annee % 4 == 0: return True else : return False # ------------------- # le main # ------------------- annee=int(input("année:")) if bissextile(annee) == True: print(annee, "est bissextile") else: print(annee, "n'est pas bissextile") Exercices série 2: Testez l''exemple précédent. Faites le "planter". Ecrivez une fonction bissextile qui prenne en compte le fait que les années divisible par 100 ne sont pas bissextiles et que les années divisbles par 400 le sont quand même. Exemples série 3 : boucle while, break Définition : Une boucle while permet de répéter quelque chose plusieurs fois. Le nombre de répétitions n''est pas connu à l''avance. Exemple : Si on veut répéter la saisie jusqu''à ce qu''elle soit juste, on pourra écrire : 1ère version : avec isnumeric() while True: # on boucle sans fin : il n'y a pas de condition de sortie annee=input("année:") if annee.isnumeric() is True: annee=int(annee) break # fait sortir de la boucle else: print("Entrer un entier ! Recommencez !") 2è version : avec try except sans isnumric() : la meilleure version while True: # on boucle sans fin annee=input("année:") try: annee=int(annee) if annee >=0: # on ne traite que les années positives break # fait sortir de la boucle except: print("Entrer un entier ! Recommencez !") Test du code : if bissextile(annee) == True: print(annee, "est bissextile") else: print(annee, "n''est pas bissextile") 3è version : avec une condition dans le while continuer=True while(continuer == True): # tant que continuer est vrai : c'est une condition de sortie annee=input("année:") if annee.isnumeric() is True: annee=int(annee) continuer=False else: print("Entrer un entier ! Recommencez !") Exercices série 3: os.system(), MVC Testez l''exemple précédent avec un code "propre" structuré en MVC Ecrivez un programme qui propose 3 choix : tester si une annéee est bissextile, résoudre une équation simple (du premier degrés) quitter. Les choix 1 et 2 appelle une fonction qu''on appelle "controleur" : ctrl_bissextile() et ctrl_equation(). Le controleur 1) commence par "faire" le modèle = récupérer les données du traitement 2) ensuite fait les traitements de données 3) enfin il affiche les résultats du traitement = la vue Ces fonctions gèrent la saisie et font appel aux fonctions qu''on a déjà écrites. Le choix "q" ou "0" fait quitter le programme. On utilisera le package os pour effacer l''ecran (cherchez la solution !) Cours 2 : Données de base (23 notions) Exemples série 11 : liste, append, pop, for, range, import, random, randint, choice l=[] # liste vide notes=[12, 10, 15] print(notes) eleves=["Bérénice", "Alexandre", "Sophie", "Hector"] print(eleves) notes.append(18) # [12, 10, 15, 18] print(notes) eleve=eleves.pop() # "hector", ["Bérénice", "Alexandre", "Sophie"] print(notes, eleve, eleves) notes.sort() print(notes) eleves.sort() print(eleves) for eleve in eleves : print(eleve) for i in range(len(notes)): # compteur i de 0 au len(notes) non compris print(notes[i]) # on accède aux notes par leur "indices": de 0 à len-1 print(len(notes)) # c'est le nombre d'éléments de la liste for i in range(0, len(notes)): notes[i]+= 1 print(notes) import random notes=[] for i in range(10): notes.append(random.randint(0,20)) # un entier de 0 à 20 compris au hasard # random.random() # une valeur de 0 à 1 (non compris ?) print(notes) # un élément d'une liste au hasard prenom=random.choice(["Bérénice", "Alexandre", "Sophie", "Hector"]) print(prenom) Exercices série 11 Ecrivez un programme qui, à partir d''une première liste d''entiers donnée, fabrique une deuxième liste ne contenant que les nombres positifs de la première. Mettez ce calcul dans une fonction et écrivez un main qui utilise cette fonction Exemples série 12: max, tuple note_max = max(notes) t=(10, 15) est un tuple de 2 valeurs (on dit un couple) un tuple est entièrement non modifiable Exercices série 12 Ecrire une fonction qui retourne le min et le max d''une liste donnée. Ecrire le main qui utilise cette fonction : on verra à cette occasion un usage de déstructuration Exemples série 13 : manipulation de string : split, join, capitalize 3 outils : split, join, capitalize() "bonjour tout le monde".split() donne ['bonjour', 'tout', 'le', 'monde'] "-".join(['bonjour', 'tout', 'le', 'monde']) donne: 'bonjour-tout-le-monde' "bonjour".capitalize() donne : "Bonjour" Exercices série 13 Comment mettre en majuscule chaque mot d''une phrase séparé par un espace ? On commence par décrire ce qu''on va faire : avec tel outil je récupère ceci. Ensuite avec tel autre outil je fais ceci, etc. Ensuite on le code dans une fonction et on écrit le main qui teste la fonction. Exemples série 14 : Slicing Le slicing est une technique d'extraction d'une partie d'une string ou d'une liste l[2:5] extrait dans une liste les éléments de 2 à 4 compris l[2:] extrait de 2 à la fin l[:5] extrait de 0 à 4 compris l[:-1] extrait de 0 jusqu'à l'avant dernier compris l[:] extrait tout l[::1] extrait tout en sens inverse etc. Ca marche aussi avec les string Exercice : série 14 Ecrire la fonction précédente sans utiliser capitalize() mais en utilisant upper() : on utilisera des slices. Ecrire un programme qui teste cette fonction. Exemple série 15 : Dictionnaire eleve={"id:1", "nom":"Hector", "age":25} un dictionnaire est une organisation de données constituée de couples clé-valeur. Chaque clé est unique dans un dictionnaire. En analyse de données, les clés d''un dictionnaire correspondent à la première ligne d''une table excel. Les valeurs du dictionnaires correspondent à une des lignes suivantes de la table excel. on peut écire : eleve["id"] eleve["nom"] eleve["age"] ce sont trois variables qui s''utilise comme n''importe quelle variable. eleve["age"]=24 Exercice série 15, count, replace Ecrire une fonction qui, à partir d''une string qui représente un texte, compte le nombre d''occurrence de chaque mot dans le texte. On considère que le texte ne contient que de lettres et des espaces. La fonction count() permet de compter le nombre d''occurrences d''une valeur dans une liste. Dans un deuxième temps, on peut s''occuper de remplacer les , . ; ! etc. par des espaces. La fonction replace() permet de remplacer un caractère (ou un mot) d''un texte par un autre (ou un mot ou rien). On peut demander à chatgpt de générer des phrases. Exemple série 16 : excel et csv, fichier, open, with-as, une table excel (équivalente à un fichier CSV) se traduit par une liste de dictionnaire. eleves = [ {"id": 1, "nom": "Hector", "age":25}, {"id": 2, "nom": "Sophie", "age":30}, {"id": 3, "nom": "Alexandre", "age":18}, {"id": 4, "nom": "Bérénice", "age":22} ] On va lire des fichiers CSV et transformer le contenu en liste de dictionnaires : import csv # les fonctions : le modèle def lire_csv_en_liste_de_dict(fichier_path, delimiter=';', quotechar='"'): """ Lit un fichier CSV et retourne une liste de dictionnaires :in: fichier_path: chemin vers le fichier CSV à lire :return: liste_dict sous la forme d'une liste de dictionnaires """ with open(fichier_path, mode='r', newline='', encoding='utf-8') as fichier: lecteur_csv = csv.DictReader(fichier, delimiter=delimiter, quotechar=quotechar) # Transformer chaque ligne en dictionnaire et la stocker dans une liste liste_dict = [ligne for ligne in lecteur_csv] return liste_dict # Le main - traitement fichier_path = 'employes.csv' # Remplace par le chemin réel de ton fichier CSV individus = lire_csv_en_liste_de_dict(fichier_path) # le main - affichage for individu in individus: print(individu) Exercice série 16 Tester le code de chargement du CSV des employes Calculer le salaire moyen Récupérer tous les employes dont la fonction est "analyst" Exemple série 17 : f-string la f-string nous permet de formater l''affichage d''un tableau for individu in individus: print( f"| id: {individu['id']:>5s} " f"| nom: {individu['nom']:>10s} " f"|" ) Exercice série 17 Afficher tous les employes et tous leurs attributs en formatant la largeur d''affichage avec des f-string Le but est d''obtenir un résultat proche de ceci : +------+--------+-----------+---------------+---------+------------+----------------+-----------------+ | id | nom | fonction | date_embauche | salaire | commission | id_departement | id_employe_chef | +------+--------+-----------+---------------+---------+------------+----------------+-----------------+ | 7369 | SMITH | CLERK | 1980-12-17 | 800.00 | NULL | 20 | 7902 | | 7499 | ALLEN | SALESMAN | 1981-02-20 | 1600.00 | 300.00 | 30 | 7698 | | 7521 | WARD | SALESMAN | 1981-02-22 | 1250.00 | 500.00 | 30 | 7698 | | 7566 | JONES | MANAGER | 1981-04-02 | 2975.00 | NULL | 20 | 7839 | | 7654 | MARTIN | SALESMAN | 1981-09-28 | 1250.00 | 1400.00 | 30 | 7698 | | 7698 | BLAKE | MANAGER | 1981-05-01 | 2850.00 | NULL | 30 | 7839 | | 7782 | CLARK | MANAGER | 1981-06-09 | 2450.00 | NULL | 10 | 7839 | | 7788 | SCOTT | ANALYST | 1982-12-09 | 3000.00 | NULL | 20 | 7566 | | 7839 | KING | PRESIDENT | 1981-11-17 | 5000.00 | NULL | 10 | NULL | | 7844 | TURNER | SALESMAN | 1981-09-08 | 1500.00 | 0.00 | 30 | 7698 | | 7900 | JAMES | CLERK | 1981-12-03 | 950.00 | NULL | 30 | 7698 | | 7902 | FORD | ANALYST | 1981-12-03 | 3000.00 | NULL | 20 | 7566 | | 7903 | ADAMS | CLERK | 1983-01-12 | 1100.00 | NULL | 20 | 7788 | | 7904 | MILLER | CLERK | 1982-01-23 | 1300.00 | NULL | 10 | 7782 | +------+--------+-----------+---------------+---------+------------+----------------+-----------------+