(Initiation à la) programmation (et à l`algorithmique)
Transcription
(Initiation à la) programmation (et à l`algorithmique)
(Initiation à la) programmation (et à l'algorithmique) Semaine 8 G. Richomme [email protected] Université Paul Valéry Montpellier 3 Licence AES parcours Misahs cours 2012-2013 1 [email protected] (Initiation à la) programmation (et à l'algorithmique) Partie 0 : contrôle continu 2 → voir correction sur site 2 [email protected] (Initiation à la) programmation (et à l'algorithmique) Partie 1 : correction des exercices à faire pour aujourd'hui 3 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une date, calcule le nombre de jours qui s'est écoulé depuis le premier janvier de l'année de la date 4 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une date, calcule le nombre de jours qui s'est écoulé depuis le premier janvier de l'année de la date Rappel : nous avons déjà écrit une fonction dont l'en-tête est def nombre_jours( mois, annee ): # retourne le nombre de jours dans le mois # en fonction de l'annee 4 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une date, calcule le nombre de jours qui s'est écoulé depuis le premier janvier de l'année de la date Rappel : nous avons déjà écrit une fonction dont l'en-tête est def nombre_jours( mois, annee ): # retourne le nombre de jours dans le mois # en fonction de l'annee Analyse du problème : données, résultats, ... Ecriture de l'en-tête. Réexion sur comment résoudre le problème : analyse d'un exemple Ecriture d'un exemple. 4 [email protected] (Initiation à la) programmation (et à l'algorithmique) def nb_jours_depuis_1_janvier(jour, mois, annee): # donne le nombre de jours écoulés depuis le début de l'année # (date comprise) # = donne le numéro du jour dans l'année nb = 0 m=1 while m < mois : nb = nb + nombre_jours( m, annee) m=m+1 return nb + jour 5 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant données deux années, calcule le nombre de jours entre le premier janvier de la première année et le 31 décembre de l'année précédent la deuxième année donnée. Rappel : nous avons déjà écrit une fonction dont l'en-tête est def est_annee_bissextile( annee ): # retourne True si annee désigne une année bissextile, # retourne False sinon. 6 [email protected] (Initiation à la) programmation (et à l'algorithmique) Une solution def nb_jours_entre_deux_annees( annee1, annee2): # Calcule le nombre de jours entre le 1er janvier annee1 # et 31 décembre (annee2 -1) annee = annee1 nbj = 0 while annee < annee2: if est_annee_bissextile( annee ): nbj = nbj + 366 else: nbj = nbj + 365 annee = annee + 1 return nbj 7 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui étant donnée deux dates, calcule le nombre de jours entre les deux dates sans compter le jour de la deuxième date. 8 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui étant donnée deux dates, calcule le nombre de jours entre les deux dates sans compter le jour de la deuxième date. def nb_jours_entre_deux_dates( j1, m1, a1, j2, m2, a2): # Calcule le nombre de jours entre la date j1/m1/a1 # et la veille de j2/m2/a2 nbj1 = nb_jours_depuis_1_janvier( j1,m1,a1) nbj2 = nb_jours_depuis_1_janvier( j2,m2,a2) nbj3 = nb_jours_entre_deux_annees( a1, a2) return nbj2-nbj1+nbj3 8 [email protected] (Initiation à la) programmation (et à l'algorithmique) Calendrier perpétuel Application : calendrier perpétuel Écrire une fonction qui étant donnée une date, donne le numéro de jour de la semaine correspondant (1 pour lundi, ...). 9 [email protected] (Initiation à la) programmation (et à l'algorithmique) Calendrier perpétuel Application : calendrier perpétuel Écrire une fonction qui étant donnée une date, donne le numéro de jour de la semaine correspondant (1 pour lundi, ...). voir chier calendrier_perpetuel.py 9 [email protected] (Initiation à la) programmation (et à l'algorithmique) Partie 2 : LISTES 10 [email protected] (Initiation à la) programmation (et à l'algorithmique) Introduction Objectifs Pouvoir agglomérer dans une seule entité, un ensemble ordonné de données. 11 [email protected] (Initiation à la) programmation (et à l'algorithmique) Introduction Objectifs Pouvoir agglomérer dans une seule entité, un ensemble ordonné de données. Explications : "dans une seule entité" : en particulier, dans une seule variable. "un ensemble ordonné" : il y a un premier élément, un deuxième, etc... 11 [email protected] (Initiation à la) programmation (et à l'algorithmique) Introduction Objectifs Pouvoir agglomérer dans une seule entité, un ensemble ordonné de données. Explications : "dans une seule entité" : en particulier, dans une seule variable. "un ensemble ordonné" : il y a un premier élément, un deuxième, etc... Exemples : une date ; 11 [email protected] (Initiation à la) programmation (et à l'algorithmique) Introduction Objectifs Pouvoir agglomérer dans une seule entité, un ensemble ordonné de données. Explications : "dans une seule entité" : en particulier, dans une seule variable. "un ensemble ordonné" : il y a un premier élément, un deuxième, etc... Exemples : une date ; les données d'un client, d'un salarié ; 11 [email protected] (Initiation à la) programmation (et à l'algorithmique) Introduction Objectifs Pouvoir agglomérer dans une seule entité, un ensemble ordonné de données. Explications : "dans une seule entité" : en particulier, dans une seule variable. "un ensemble ordonné" : il y a un premier élément, un deuxième, etc... Exemples : une date ; les données d'un client, d'un salarié ; une suite de nombres ; ... [email protected] (Initiation à la) programmation (et à l'algorithmique) 11 Introduction Remarques La notion d'objet qui sera abordée au second semestre s'avérera plus intéressante pour la gestion de certains ensembles de données. 12 [email protected] (Initiation à la) programmation (et à l'algorithmique) Introduction Remarques La notion d'objet qui sera abordée au second semestre s'avérera plus intéressante pour la gestion de certains ensembles de données. Il existe, en Python, d'autres types permettant de structurer des données. Notamment les tuples à ne pas confondre avec les listes. 12 [email protected] (Initiation à la) programmation (et à l'algorithmique) Introduction Remarques La notion d'objet qui sera abordée au second semestre s'avérera plus intéressante pour la gestion de certains ensembles de données. Il existe, en Python, d'autres types permettant de structurer des données. Notamment les tuples à ne pas confondre avec les listes. Chaque langage propose ses propres types de structuration (plus ou moins agréables). 12 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exemples de listes date = [ 1, 10, 2010 ] Virgule = séparateur. Les crochets sont obligatoires. Si oubliés, c'est comme si on mettait des parenthèses : on dénit alors un tuple. Exemples : retour de fonction ! Tuple 6= Liste Les listes sont modiables. Pas les tuples. 13 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exemples de listes date = [ 1, 10, 2010 ] Virgule = séparateur. Les crochets sont obligatoires. Si oubliés, c'est comme si on mettait des parenthèses : on dénit alors un tuple. Exemples : retour de fonction ! Tuple 6= Liste Les listes sont modiables. Pas les tuples. semaine = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"] Pas de ... dans les dénitions ! 13 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exemples de listes date = [ 1, 10, 2010 ] Virgule = séparateur. Les crochets sont obligatoires. Si oubliés, c'est comme si on mettait des parenthèses : on dénit alors un tuple. Exemples : retour de fonction ! Tuple 6= Liste Les listes sont modiables. Pas les tuples. semaine = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"] Pas de ... dans les dénitions ! personnes = [ ["Tom", "Sawyer", 15], ["Huckleberry", "Finn", 17] ] 13 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exemples de listes date = [ 1, 10, 2010 ] Virgule = séparateur. Les crochets sont obligatoires. Si oubliés, c'est comme si on mettait des parenthèses : on dénit alors un tuple. Exemples : retour de fonction ! Tuple 6= Liste Les listes sont modiables. Pas les tuples. semaine = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"] Pas de ... dans les dénitions ! personnes = [ ["Tom", "Sawyer", 15], ["Huckleberry", "Finn", 17] ] prix = [ 12.3 , 0.4, 13.2, 4.1, 12, 13.5] [email protected] (Initiation à la) programmation (et à l'algorithmique) 13 Premières opérations sur les listes Constructeur : [ , , ...] Liste vide : [ ] Longueur d'une liste : fonction len 14 [email protected] (Initiation à la) programmation (et à l'algorithmique) Premières opérations sur les listes Constructeur : [ , , ...] Liste vide : [ ] Longueur d'une liste : fonction len Accès à un élément Les éléments d'une liste l sont numérotés de 0 à len(l)-1. Si 0 ≤ i ≤ len(l) − 1, l[i] désigne l'élément en position i (à l'index i). 14 [email protected] (Initiation à la) programmation (et à l'algorithmique) Premières opérations sur les listes Constructeur : [ , , ...] Liste vide : [ ] Longueur d'une liste : fonction len Accès à un élément Les éléments d'une liste l sont numérotés de 0 à len(l)-1. Si 0 ≤ i ≤ len(l) − 1, l[i] désigne l'élément en position i (à l'index i). Via la notation précédente, il est possible de récupérer la valeur d'un élément de la liste ou de la modier. >>> l =[ 2, "a", 3.1, 7] 14 [email protected] (Initiation à la) programmation (et à l'algorithmique) Premières opérations sur les listes Constructeur : [ , , ...] Liste vide : [ ] Longueur d'une liste : fonction len Accès à un élément Les éléments d'une liste l sont numérotés de 0 à len(l)-1. Si 0 ≤ i ≤ len(l) − 1, l[i] désigne l'élément en position i (à l'index i). Via la notation précédente, il est possible de récupérer la valeur d'un élément de la liste ou de la modier. >>> l =[ 2, "a", 3.1, 7] >>> l [2, 'a', 3.1000000000000001, 7] 14 [email protected] (Initiation à la) programmation (et à l'algorithmique) Premières opérations sur les listes Constructeur : [ , , ...] Liste vide : [ ] Longueur d'une liste : fonction len Accès à un élément Les éléments d'une liste l sont numérotés de 0 à len(l)-1. Si 0 ≤ i ≤ len(l) − 1, l[i] désigne l'élément en position i (à l'index i). Via la notation précédente, il est possible de récupérer la valeur d'un élément de la liste ou de la modier. >>> l =[ 2, "a", 3.1, 7] >>> l [2, 'a', 3.1000000000000001, 7] >>> l[0] 2 14 [email protected] (Initiation à la) programmation (et à l'algorithmique) Premières opérations sur les listes Constructeur : [ , , ...] Liste vide : [ ] Longueur d'une liste : fonction len Accès à un élément Les éléments d'une liste l sont numérotés de 0 à len(l)-1. Si 0 ≤ i ≤ len(l) − 1, l[i] désigne l'élément en position i (à l'index i). Via la notation précédente, il est possible de récupérer la valeur d'un élément de la liste ou de la modier. >>> l =[ 2, "a", 3.1, 7] >>> l [2, 'a', 3.1000000000000001, 7] >>> l[0] 2 >>> l[2] = "new" 14 [email protected] (Initiation à la) programmation (et à l'algorithmique) Premières opérations sur les listes Constructeur : [ , , ...] Liste vide : [ ] Longueur d'une liste : fonction len Accès à un élément Les éléments d'une liste l sont numérotés de 0 à len(l)-1. Si 0 ≤ i ≤ len(l) − 1, l[i] désigne l'élément en position i (à l'index i). Via la notation précédente, il est possible de récupérer la valeur d'un élément de la liste ou de la modier. >>> l =[ 2, "a", 3.1, 7] >>> l [2, 'a', 3.1000000000000001, 7] >>> l[0] 2 >>> l[2] = "new" >>> l [2, 'a', 'new', 7] [email protected] 14 (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une liste l, ache ses diérents éléments. 15 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une liste l, ache ses diérents éléments. def affiche_liste( l ): # Affiche dans l'ordre les éléments de la liste 15 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une liste l, ache ses diérents éléments. def affiche_liste( l ): # Affiche dans l'ordre les éléments de la liste i = 0 while i < len( l ): print( l[i] ) i = i + 1 15 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une liste l, récupère la liste dans une chaîne de caractères. 16 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une liste l, récupère la liste dans une chaîne de caractères. def liste2chaine( l ): # Transforme une liste en chaîne affichable 16 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice Écrire une fonction qui, étant donnée une liste l, récupère la liste dans une chaîne de caractères. def liste2chaine( l ): # Transforme une liste en chaîne affichable if l != [] : s = str( l[0] ) i = 1 while i < len( l ): s = s + ", " + str( l[i] ) i = i + 1 else: s = "" return s 16 [email protected] (Initiation à la) programmation (et à l'algorithmique) La fonction range range( n ) retourne la liste des entiers de 0 à n-1. range(min, max) retourne la liste des entiers de min à max-1 range(min, max, pas) retourne la liste des entiers de la forme min + k * pas qui sont strictement inférieurs à max. 17 [email protected] (Initiation à la) programmation (et à l'algorithmique) La fonction range range( n ) retourne la liste des entiers de 0 à n-1. range(min, max) retourne la liste des entiers de min à max-1 range(min, max, pas) retourne la liste des entiers de la forme min + k * pas qui sont strictement inférieurs à max. Remarque : en fait, c'est un itérateur qui est retourné et pas une liste ! 17 [email protected] (Initiation à la) programmation (et à l'algorithmique) La fonction range range( n ) retourne la liste des entiers de 0 à n-1. range(min, max) retourne la liste des entiers de min à max-1 range(min, max, pas) retourne la liste des entiers de la forme min + k * pas qui sont strictement inférieurs à max. Remarque : en fait, c'est un itérateur qui est retourné et pas une liste ! La fonction list permet de transformer en liste un itérateur. 17 [email protected] (Initiation à la) programmation (et à l'algorithmique) La fonction range range( n ) retourne la liste des entiers de 0 à n-1. range(min, max) retourne la liste des entiers de min à max-1 range(min, max, pas) retourne la liste des entiers de la forme min + k * pas qui sont strictement inférieurs à max. Remarque : en fait, c'est un itérateur qui est retourné et pas une liste ! La fonction list permet de transformer en liste un itérateur. >>> list( range(3) ) [0, 1, 2] >>> list( range( 3, 6) ) [3, 4, 5] >>> list( range(10, 32, 5) ) [10, 15, 20, 25, 30] 17 [email protected] (Initiation à la) programmation (et à l'algorithmique) La fonction range range( n ) retourne la liste des entiers de 0 à n-1. range(min, max) retourne la liste des entiers de min à max-1 range(min, max, pas) retourne la liste des entiers de la forme min + k * pas qui sont strictement inférieurs à max. Remarque : en fait, c'est un itérateur qui est retourné et pas une liste ! La fonction list permet de transformer en liste un itérateur. >>> list( range(3) ) [0, 1, 2] >>> list( range( 3, 6) ) [3, 4, 5] >>> list( range(10, 32, 5) ) [10, 15, 20, 25, 30] 17 [email protected] (Initiation à la) programmation (et à l'algorithmique) L'instruction for for i in range(min, max): instructions 18 [email protected] (Initiation à la) programmation (et à l'algorithmique) L'instruction for for i in range(min, max): instructions réalise exactement la même chose que : i = min while i < max: instructions i = i + 1 Avantage : plus compact, plus clair. Inconvénient : n'existe pas dans la plupart des autres langages de programmation ; plus dicile à tracer car mécanisme caché. 18 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exemples def ache_liste_2( l ): # Ache dans l'ordre les éléments de la liste for i in range( 0, len( l )): print( l[i] ) def liste2chaine_2( l ): # Transforme une liste en chaîne achable if l == [] s = str( l[0] ) for i in range( 1, len( l ) ): s = s + ", " + str( l[i] ) else : s = "" return s 19 [email protected] (Initiation à la) programmation (et à l'algorithmique) Agrandir une liste Concaténation : + Exemple : [ 2, 1 ] + [2, 6] vaut la liste [2, 1, 2, 6] 20 [email protected] (Initiation à la) programmation (et à l'algorithmique) Agrandir une liste Concaténation : + Exemple : [ 2, 1 ] + [2, 6] vaut la liste [2, 1, 2, 6] Ajout d'un élément dans une liste l : Utiliser la concaténation. l.append Exemple : si l vaut [2, 1, 2, 6], l.append( 10) modie en [2, 1, 2, 6, 10]. 20 [email protected] (Initiation à la) programmation (et à l'algorithmique) Exercice A FAIRE et envoyer par mail avant vendredi Écrire une fonction permettant de saisir une liste d'entiers strictement positifs au clavier (la saisie d'une valeur négative ou nulle provoquera l'arrêt de la saisie). 21 [email protected] (Initiation à la) programmation (et à l'algorithmique)