cours d'initiation à la programmation modulaire sous Python en utilisant des fonctions et des procédures pour décomposer un problème en sous-problème plus facile à traiter en utilisant des fonctions et des procédures.
Objectif général : Développer en orienté objet avec Python
Objectifs opérationnels :
- Organiser le code grâce aux classes
- Sécuriser une classe avec l’encapsulation
- Réutiliser et factoriser du code avec l’héritage
- Invoquer des méthodes de même nom, quel que soit le type d'objet sur lequel elles opèrent, sans avoir à effectuer au préalable une vérification de type grâce au polymorphisme
cours d'initiation à la programmation modulaire sous Python en utilisant des fonctions et des procédures pour décomposer un problème en sous-problème plus facile à traiter en utilisant des fonctions et des procédures.
Objectif général : Développer en orienté objet avec Python
Objectifs opérationnels :
- Organiser le code grâce aux classes
- Sécuriser une classe avec l’encapsulation
- Réutiliser et factoriser du code avec l’héritage
- Invoquer des méthodes de même nom, quel que soit le type d'objet sur lequel elles opèrent, sans avoir à effectuer au préalable une vérification de type grâce au polymorphisme
This course will introduce the core data structures of the Python programming language. We will move past the basics of procedural programming and explore how we can use the Python built-in data structures such as lists, dictionaries, and tuples to perform increasingly complex data analysis.
Ce cours aborde la gestion d'erreurs en programmation, c'est-à-dire comment gérer les situations où une erreur se produit. Après avoir présenté le principe des spécifications et de la programmation défensive avec l'instruction assert, ce cours présente l'instruction try/except qui permet de capturer des erreurs. Enfin, le cours termine en présentant comment définir ses propres erreurs et les générer avec l'instruction raise.
C'est le chapitre 1 sur le langage Python qui est une introduction à ce langage.
Si vous avez des remarques ou des suggestions pour l’améliorer n’hésitez pas à m’écrire via ce courriel:
pr.azizdarouichi@gmail.com
Bonne lecture.
This course will introduce the core data structures of the Python programming language. We will move past the basics of procedural programming and explore how we can use the Python built-in data structures such as lists, dictionaries, and tuples to perform increasingly complex data analysis.
Ce cours aborde la gestion d'erreurs en programmation, c'est-à-dire comment gérer les situations où une erreur se produit. Après avoir présenté le principe des spécifications et de la programmation défensive avec l'instruction assert, ce cours présente l'instruction try/except qui permet de capturer des erreurs. Enfin, le cours termine en présentant comment définir ses propres erreurs et les générer avec l'instruction raise.
C'est le chapitre 1 sur le langage Python qui est une introduction à ce langage.
Si vous avez des remarques ou des suggestions pour l’améliorer n’hésitez pas à m’écrire via ce courriel:
pr.azizdarouichi@gmail.com
Bonne lecture.
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...RichardTerrat1
Le calcul récursif est fondé sur la composition des algorithmes (un algorithme peut invoquer le résultat calculé par un autre algorithme),utilisant la propriété que, sous certaines conditions, un algorithme peut, dans sa définition même, se composer avec lui-même.
Cet article n’aborde pas les aspects théoriques relevant de cette problématique et se veut une introduction par l’exemple aux possibilités calculatoires qu’elle offre. Il est destiné aux étudiants de niveau Licence ou Master en Informatique, notamment à ceux préparant un CAPES d’informatique, comme aux enseignants du secondaire qui souhaitent accompagner l’apparition de la discipline Informatique au lycée.
En particulier, après avoir discuté la composition d’un algorithme avec lui-même dans deux exemples aux résultats contradictoires et proposé une démarche pragmatique de conception et de première ana-lyse d’algorithmes récursifs, cet article présente une dizaine d’exemples pouvant inspirer des exercices à traiter sous forme de cours ou de séances de travaux dirigés
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)Tunisie collège
Ministère de l’Éducation de Tunisie
Direction Générale des Programmes
et de la Formation Continue
Le langage de programmation choisi pour implémenter les solutions algorithmiques est le
langage de programmation Python.
Quelques pages intéressantes sur Python avec des exemples, et en particulier en 1.4 le programme de calcul d'une intégrale par la méthode des rectangles, des trapèzes et de Simpson.
(1) Ce document provient de : https://www.apprendre-en-ligne.net/pymath/support.pdf (au 27 mars 2019)
(2) Il est extrait du site : https://www.apprendre-en-ligne.net/index.php
Ce cours est le premier en lien avec l'algorithmique présente les algorithmes et fonctions récursives ainsi que le type abstrait de données arbre. La première partie revient sur les notions de problème, algorithhme et spécification. La deuxième partie présente la récursion et de nombreux exemples. Enfin, la troisième partie présente le type abstrait de données arbre qui permet d'organiser des données de manière hiérarchique. Le cours se termine avec une introduction aux notions de backtracking et lookahead.
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
1. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 1
Chapitre 5 : Manipulation des itérables en python
Effectuer des opérations de recherche sur différents types de conteneurs
Manipuler les algorithmes de Tri
Savoir leur complexité algorithmique
1. Recherche dans un conteneur non trié et dans une séquence triée
On a besoin de modifier la valeur d’un objet x par une nouvelle valeur y dans un
conteneur C. Il faut avant tout voir si x appartient à C. Python permet de faire un tel
traitement avec l’opérateur in ou l’opérateur not in. La réponse sera de type
booléen : True ou False.
Parfois, la réponse booléenne ne suffit pas ! On aura besoin de plus d’informations à
savoir l’emplacement de la valeur x qu’on cherche. Ceci est assuré par C.index(x).
On peut penser à d’autres situations plus élaborées si on veut chercher tous les
éléments dans C ayant la même valeur que x. On rappelle que C.count(x) calcule
le nombre d’occurrences de x dans C.
Ces traitements diffèrent selon le conteneur :
Un conteneur à accès séquentiel : liste, chaîne ou tuple, ou à accès direct :
ensemble ou dictionnaire
Trié : recherche guidée
Non trié : recherche aveugle
a. Cas d’un conteneur non trié
Problématique : C = est un conteneur non trié. On veut vérifier si x appartient à C.
Rech1() effectue un parcours séquentiel de C. Elle itère sur les éléments de C et pas
sur les indices. A chaque fois, on vérifie si i==x, dans ce cas, on retourne vrai et on
quitte la fonction. Si tous les objets de C sont parcourus et on n’a jamais obtenu la
valeur vrai pour la condition x==i, alors on est sûr que l’élément cherché n’existe pas.
Exemple d’exécution :
Remarque : La recherche séquentielle n’est pas adaptée aux dictionnaires.
2. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 2
On propose maintenant une autre version de recherche basée sur les indices et non
pas les objets. La détermination du résultat de la recherche est basée sur la valeur
de i avec laquelle on quitte la boucle tant que. Si i atteint len(C), ceci veut dire
qu’on a parcouru tout le conteneur C.
On propose maintenant de trouver le premier x dans C. Pour ce faire, on propose la
méthode Rech3. Si on ne trouve pas l’élément x, on retourne généralement un
indice non existant (comme -1). Or Python utilise aussi un système d’indexation
négatif. Ainsi, il vaut mieux retourner None.
b. Cas d’une séquence triée
On suppose maintenant que le conteneur C est trié d’une manière croissante. La
recherche est guidée par la valeur de x :
Solution 1 :
Solution 2 :
Quand le conteneur est trié, on peut penser à procéder par dichotomie en suivant
les étapes suivantes :
On calcule le milieu m du conteneur
On compare C[m] à x :
o Si C[m]=x : Trouvé !
3. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 3
o Si C[m]>x : on continue la recherche dans la partition C[0 :m]
o Si C[m]<c : on continue la recherche dans la partition C[m+1 :]
Ce principe est répété jusqu’à ce que le conteneur C ne contienne plus
d’éléments
Solution 3 : Traduisons cette version séquentielle/itérative de la recherche
dichotomique en une version récursive
c. Cas d’un dictionnaire
La position d’une entrée dans un dictionnaire est calculée à partir de sa clé. Une
fonction spéciale est utilisée pour ce faire, appelée fonction de hachage. Dans la
littérature, on croise pas mal de fonctions de hachage, on va considérer une
fonction qui se base sur les codes ascii des caractères constituants d’une clé.
4. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 4
2. Les tris
a. Tri par sélection
Le principe :
Commencer à chercher l’indice du minimum de la liste L
Permuter le 1er élément de la liste avec l’élément minimum trouvé
Chercher l’indice du minimum des éléments de la sous liste L[1 :] et le
permuter avec le deuxième élément
Continuer ce principe jusqu’à ce que la liste devienne triée
o On échange l’élément à la position i avec le minimum de la sous liste
L[i+1 :]. L’algorithme se termine au bout de n-1 boucles quand on a
trouvé n-1 minimums successifs
Le code :
b. Tri par fusion
Le principe :
C’est un algorithme de tri basé sur le principe de « Diviser pour régner ». On subdivise
la liste en deux sous listes de tailles presque égales, on trie en suite ces dernière puis
on les fusionne pour obtenir une liste triée.
L’algorithme utilise deux fonctions :
5. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 5 : Manipulation des itérables en python 5
Fonction fusion : Fusionne deux listes supposées triées en une seule. Par
exemple, fusion([1,2,4],[2,3,8]) renvoie [1,2,2,3,4,8]. L’algorithme de la fusion
procède comme suit :
o Comparer les premiers éléments des deux sous listes
o Ajouter le plus petit d’entre eux dans une liste résultat
o Avancer dans la liste d’où est ce que l’élément a été pris
o Si on termine tous les éléments d’une liste et qu’il reste encore des
éléments dans la seconde, on effectue une copie des éléments
restants directement
Fonction tri : C’est une fonction récursive. Elle consiste à :
o Couper en deux la liste initiale
o Trier par appels récursifs les deux sous listes
o Fusionner les deux sous listes triées en utilisant la fonction fusion
Le code :
c. Tri rapide
Le principe :
C’est aussi un algorithme basé sur le paradigme « diviser pour régner » :
Diviser : Il s’agit de choisir deux sous listes A et B contenant respectivement les
éléments de L qui sont inférieurs à p et ceux qui lui sont supérieurs ou égaux.
Régner : Le même principe est appliqué pour trier les sous-listes A et B, jusqu’à
obtention de sous listes de tailles ≤ 1
6. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Complexité 6
Combiner : Aucun effort de combinaison n’est nécessaire étant donné que
les sous listes sont déjà triés
Le code :
3. Complexité
a. Calcul des coûts des fonctions
Le calcul de coût consiste à déterminer le temps nécessaire à l’exécution des
différentes instructions d’un programme en fonction de la taille des données. Les
règles suivantes sont à prendre en considération :
Instruction Désignation Notation Formule de calcul du coût
Instruction simple input,
print,=,opérations
de comparaisons,
(==, !=,<=,…),
opérations
aréthmétiques
(+,,*,/,//,%,**),
break,
continue,return
Nécessite une
unité de temps à
leur exécution
1
Structure
conditionnelle
If condition:
i1
else:
i2
On note C1,C2,
C3 les temps
d’exécutions
respectifs
nécessaires à la
condition, i1 et i2
C1+max(C2,C3)
7. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Complexité 7
Boucle for for i in range(N) :
ins
On note ci le
temps
d’exécution du
bloc d’instruction
ins. Deux cas se
présentent :
Le bloc ins
dépend de la
valeur de i
Le bloc ins est
indépendant
de la valeur
de i
∑ci
n*c
Boucle while while condition :
ins
On note m, c1,
et c2
respectivement
le nombre de
boucles espéré,
le coût de la
condition et le
coût de ins
m*max(c1,c2)
b. Mesure de la complexité
Le calcul de coût d’une fonction renseigne sur le temps nécessaire à son
exécution, mais il suffit de changer de machine que la valeur change avec des
données identiques! D’où, il sera utile de construire une fonction qui décrit le
comportement de l’algorithme quand:
a. La taille…
b. Et le traitement…
Instruction Notation Formule de calcul du coût
Input, print,=,
opérations de
comparaisons,
opérations
arithmétiques, return,
break, continue
O(1)
Un bloc d’instruction
simple
I1
..
Ik
Complexité respective de
I1..Ik sont O(f1(n)),
O(f2(n)).. O(fk(n))
O(max(g(n),f1(n),f2(n)))
8. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Complexité 8
If condition:
i1
else:
i2
Complexités respective de
la condition, de i1 et de i2
sont données par : O(g(n)),
O(f1(n)) et O(f2(n))
O(max(g(n),f1(n),f2(n))
for I in range(N):
ins
Complexité de ins est note
O(f(n))
O(N*f(n))
while condition:
ins
La boucle se répète m fois
que la complexité de la
condition est O(g(n)) et la
complexité de l’instruction
O(f(n))
O(m*max(O(g(n),O(f(n)))
c. Classification des problèmes
Classe de complexité désignations Exemple de problèmes
O(1) Complexité constante: le
temps d’exécution
n’augmente pas avec
l’accroissement de la taille
des données
Affectation, calcul arithmétique,
comparaison, accès au premier
élément d’un ensemble de
données
O(log(n)) Complexité
logarithmique :
augmentation très faible
du temps d’exécution
quand la taille des
données s’accroit
Recherche dichotomique,
conversion d’un décimal en
binaire, couper un ensemble de
données en deux sous
ensembles
O(n) Complexité linéaire : le
temps d’exécution
s’accroit d’une manière
linéaire avec la taille des
données
Parcours d’une liste, Recherche
linéaire dans une liste
O(n log(n)) Complexité quasi-linéaire Couper un ensemble de
données en deux sous
ensembles d’une manière
répétitive et combiner les sous
ensembles pour obtenir la
solution finale ( les problèmes
diviser pour régner..)
O(n²) Complexité quadratique :
le temps de l’exécution
est le carré de la taille des
données
Double boucles imbriquées
O(n3) Complexité cubique : Trois boucles imbriquées
O(np) Complexité polynomiale P boucles imbriquées
9. [MANIPULATION DES ITERABLES EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Application 9
O(2n)ou O(exp(n)) Complexité exponentielle Générer tous les sous-ensembles
possibles d’un sous ensemble
possible (Tours de Hanoi)
Application
Calculer le coût des méthodes de tris vu dans ce chapite.