Un aperçu global


Voici une carte mentale qui permet de regrouper les notions élémentaires indispensables à la construction d'un algorithme ou d'un programme,
Ci-dessous les points abordés dans ce tutoriel.



La prise en main


Nous consacrerons ce tutoriel à la programmation que l'on peut réaliser en Python avec Thonny.
Thonny est un IDE libre que l'on peut télécharger ici
Il est indispensable d'installer ce logiciel chez soi, il contient une version de python 3.
Exécutez le logiciel.
Vous arrivez sur cette interface:


Création d'un programme


Pour créer un programme, , le code en python est à saisir dans la fenêtre en haut à droite, appelée untitled au démarrage.
Pour exécuter le code, il suffit de cliquer sur la petite flèche verte, d'enregistrer le programme (essai1) à l'endroit souhaité lors du premier lancement.
L'étoile de untitle disparaitra, indiquant que le code a bien été enregistré sous la dernière forme et dans le shell (coquille en Anglais) on trouvera ce que produit le code.


Il est possible dès maintenant d'écrire des instructions en python et de les exécuter.

Exercice : réaliser un programme permettant d'afficher " Bonjour à tous." et enregistrer le sur une clé USB, ou le dossier personnel.











Les variables


Les variables sont des emplacements réservés dans la mémoire des ordinateurs, elles ont un nom, un type, une valeur et une portée (locale ou globale).
On distingue les variables de type simple (booléen, entier, réel) des variables construites (chaînes de caractères, tableau, liste, tuple, dictionnaire,...) qui sont constituées d'éléments pouvant être simples ou eux même construits.
Les variables construites sont soit mutables, c'est à dire modifiables après leur création(tableaux, listes, dictionnaires), soit non-mutables, c'est à dire non modifiables après leur création (chaîne de caractères, tuple)
Les variables construites sont soit séquentielles c'est à dire que l'on a accès à leurs éléments à l'aide d'indices(tableaux, listes, tuples, chaînes de caractères), soit non-séquentielles, c'est à dire dont les éléments ne sont pas indicés (dictionnaire) on y accède par une clé.

Voici un exemple d'utilisation de variables.


Pour exécuter ce code, il suffit de nouveau de cliquer sur le triangle vert de la barre de taches.
Il est important de remarquer que python est faiblement typé, c'est à dire qu'une même variable, pourra contenir différents types de valeurs. Ici la variable 'a' était initialement de type entier, puis une chaine de caractères. Le premier + était donc celui de l'addition, le second de la concaténation. Réaliser la trace d'un algorithme ou d'un programme permet de suivre l'évolution de chaque valeur de variables, pas à pas.

Exercice : réaliser la trace de ce programme.

Saisies


La saisie d'une valeur d'une variable se fait par l'instruction input, mais attention, par défaut la valeur saisie sera une chaine de caractères, même si un nombre est saisi! C'est pourquoi, pour saisir un entier, il faudra utiliser la fonction int() et pour un réel : float(). Si l'on ne souhaite pas préciser le type du nombre eval() suffit.


Exercice : demander à l'utilisateur de saisir son prénom et deux notes. Calculer la moyenne et afficher "... tu as ... de moyenne " en rappelant le prénom et en affichant la valeur de la moyenne.

Test


Le "si ...alors...sinon...fin de si" est omniprésent en algorithmique et programmation. En python, la synthaxe est très réduite : if (proposition logique) :
...indentation...(si la proposition est vraie alors exécuter.ceci..)
...indentation...else: (si la proposition est fausse alors exécuter.cela..)
Un changement d'indentation marquera la fin du test


Un principe important : python ne possède pas de symbole d'ouverture { ou de fermeture} des instructions, il faut donc indenter de la même façon le code faisant partie des mêmes structures.

Exercice : demander à l'utilisateur de saisir un réel. Si ce réel appartient à [-2 ; 5] afficher " ... appartient à [-2 ; 5]" en rappelant la valeur de la variable saisie, sinon afficher " ... n'appartient pas à [-2 ; 5]"

Un exemple de boucle "pour"


La boucle "pour" permet de répéter une ou plusieurs instructions, elle s'utilise si l'on sait à l'avance combien de fois la boucle devra tourner pour obtenir le résultat attendu.




Toutes les instructions qui sont à répéter au sein de la boucle sont indentées de la même façon. Pour sortir de la boucle, la nouvelle instruction est indentée vers la gauche.
Il existe d'autres syntaxes enrichies :
for k in range (2,6): qui fera prendre à k les valeurs 2, 3, 4, 5. La deuxième valeur n'est pas atteinte.
for k in range (2,14,4): qui fera prendre à k les valeurs 2, 6, 10, on dit ici que le pas est de 4
Il en existe d'autres encore pour parcourir les variables construites.




Exercice : demander à l'utilisateur de saisir un entier et d'afficher la table de multiplication de cet entier.
exemple pour 5 :
1 x 5 = 5
2 x 5 = 10
.
.
.
10 x 5 = 50

Un exemple de boucle "tant que"


La boucle "tant que" permet de répéter une ou plusieurs instructions, elle s'utilise si l'on ne sait pas à l'avance combien de fois la boucle devra tourner pour obtenir le résultat attendu.


Ces instructions permettent de demander à l'utilisateur combien valent 6x7, tant qu'il ne donne pas la bonne réponse.

Toutes les instructions qui sont à répéter au sein de la boucle sont indentées de la même façon. Pour sortir de la boucle, la nouvelle instruction est indentée vers la gauche.


Exercice : demander à l'utilisateur de saisir un entier. Afficher le nombre de fois qu'un nombre entier saisi par l'utilisateur est divisible par 2.
ex: 80 est divisible 4 fois par 2 : 2x2x2x2x5 alors que 7 est divisible 0 fois par 2.
On pourra utiliser le modulo 2 d'un nombre n qui se note n%2. n%2 retourne 0 si n est pair et 1 sinon.

Un exemple sur les chaines de caractères


Une chaine de caractères est une variable construite séquentielle, c'est à dire qu'elle peut se composer de plusieurs caractères et que ceux-ci seront accessibles par des indices débutant à 0. Une chaine de caractères (str en python) est une variable non mutable, nous ne pourrons pas modifier l'un de ses caractères. la chaine vide est: ""
La concaténation se fait à l'aide de +
La saisie d'une chaine se fait à l'aide de : input().
Les caractères d'une chaine sont indicés à partir de 0.
La longueur d'une chaine s'obtient à l'aide de la fonction len() Voici un exemple:


Vous retrouverez le programme ici

Exercice : demander à l'utilisateur de saisir un mot. Tester si ce mot est un palindrome.

Un exemple sur les tableaux


Un tableau est une variable construite séquentielle, c'est à dire qu'elle peut se composer de plusieurs éléments et que ceux-ci seront accessibles par des indices débutant à 0. Un tableau (list en python) est une variable mutable, nous pourrons modifier l'une des valeurs à l'intérieur du tableau ou en ajouter en fin de tableau à l'aide de la méthode append() Python ne fait pas de distinction entre liste et tableau. Le tableau vide est: []
Les éléments d'un tableau sont numérotés à partir de 0.
La longueur, la dimension, c'est à dire le nombre d'éléments d'un tableau s'obtient à l'aide de la fonction len() Voici un exemple:


Vous retrouverez le programme ici

Exercice : demander à l'utilisateur de saisir quatre nombres, les placer dans un tableau. Déterminer le plus petit.

Un exemple sur les p-uplets


Un p-uplet, ou n-uplet, ou tuple est une variable construite séquentielle, c'est à dire qu'elle peut se composer de plusieurs éléments et que ceux-ci seront accessibles par des indices débutant à 0.
Une variable de type tuple n'est pas mutable, c'est à dire qu'elle ne peut plus être modifiée après sa création..
Ainsi on ne peut ni utiliser append() pour ajouter un élément à un tuple, ni changer l'une des valeurs de ses éléments.
Le tuple sert à effectuer des affectations multiples ou à renvoyer plusieurs valeurs lors d'un appel d'une fonction, ce qui est parfois très pratique.
Le tuple vide est: ()
Les éléments d'un tuple sont numérotés à partir de 0.
Il est possible de créer un tuple a une seule valeur à condition de ne pas oublier de mettre une virgule.
Ex: Tup=("septembre",) est un typle à un seul élément.
Un tuple se note avec ou sans parenthèse.
Ex: tup1=(5,6,9,7) ou tup=5,6,9,7 sont deux notations différentes d'un même tuple.
Le nombre d'éléments d'un tuple s'obtient à l'aide de la fonction len() Voici un exemple:


Vous retrouverez le programme ici

Exercice : Dans un tableau, affecter les prix hors taxes de 3 produits dans cet ordre 45,158,80, affecter ensuite leurs taux de TVA respectifs : 2,10%, 5,5% et 20% dans un tuple, . Calculer le total TTC à payer pour ces trois produits.

Un exemple sur les n-uplets nommés


Un p-uplet nommé, ou n-uplet nommé, est, comme le n-uplet, une variable construite séquentielle, c'est à dire qu'elle peut se composer de plusieurs éléments et que ceux-ci seront accessibles par des indices débutant à 0, mais en plus les éléments seront accessibles par leurs attribus
Une variable p-uplet nommé n'est pas mutable, c'est à dire qu'elle ne peut plus être modifiée après sa création.
Ainsi on ne peut ni utiliser append() pour ajouter un élément à un tuple, ni changer l'une des valeurs de ses éléments.
Le n-uplet nommé, se rencontre lors des manipulations des tables et des fichiers csv dont on extrait les données en python.
Voici un exemple:



Vous retrouverez le programme ici

Exercice : Créer la sous classe de n-uplet nommé footballeur dont les attribus seront le nom du footballeur, son année de naissance, son club. Créer au moins 3 représentants de la sous classe footballeur.

Un exemple sur les dictionnaires


Le dictionnaire est un type de variable construit mais non séquentiel, c'est à dire, qu'il n'est pas ordonné et qu'il n'y a pas d'indice qui permettra d'accéder à ses éléments. Il est modifiable ou mutable comme les listes et les tableaux, mais les éléments qui y sont placés ne seront pas disposés dans un ordre immuable. En revanche, nous pourrons accéder à n'importe lequel d'entre eux à l'aide d'une clé, laquelle pourra être alphanumérique, numérique, ou même d'un type construit sous certaines conditions. Comme dans une liste, les éléments mémorisés dans un dictionnaire peuvent être de n'importe quel type (valeurs numériques, chaînes, listes, etc.). Voici un exemple:




Vous retrouverez le programme ici

Exercice : demander à l'utilisateur de saisir quatre noms d'élèves, ainsi que leur moyenne trimestrielle, les placer dans un dictionnaire. Déterminer l'élève qui a la plus forte moyenne.

Un exemple de procédure


Jusqu'à présent nous avons réalisé des programmes principaux. Un programme principal peut appeler des sous-programmes.
Il existe deux types de sous-programmes: la procédure et la fonction, mais python, ne les distingue pas, toutes deux sont introduites par def.
La procédure ne retourne pas de valeur vers le programme principal.
Dans l'exemple la procédure se contente d'effectuer un affichage.
Ici n est le paramètre de la procédure.
Pour appeler et exécuter une précédure dans le shell, il suffit de recopier son nom et d'écrire les valeurs des paramètres que l'on veut passer, s'il en existe.


Vous retrouverez le programme ici

Exercice : demander à l'utilisateur de saisir 3 nombres. Pour chacun, tester s'il s'agit d'un entier naturel par appel de procédure.

Un exemple de fonction


Un programme principal peut appeler des sous-programmes.
Il existe deux type de sous-programmes: la procédure et la fonction, mais python, ne les distingue pas, toutes deux sont introduites par def.
La fonction retourne une valeur vers le programme principal.
Elle se termine donc par l'instruction "return"
. Dans l'exemple la fonction moy() retournera vers le programme principal la moyenne des deux valeurs de x et de y
Ici cette fonction a deux paramètres x et y.
Pour appeler et exécuter une fonction dans le shell, il suffit de recopier son nom et d'écrire les valeurs des paramètres que l'on veut passer, s'il en existe.


Vous retrouverez le programme ici


Exercice : créer une fonction qui retournera le nombre de diviseurs positifs d'un entier naturel. Puis un programme principal qui demandera à l'utilisateur de saisir un entier naturel et qui déterminera, après appel de cette fonction, si cet entier est premier ou pas.

Un exemple de fonction récursive


Une fonction récursive est une fonction qui s'appelle elle même.
Sa structure contiendra un "si...alors(condition d'amorçage) sinon (appel de la fonction) fin de si"
L'exemple proposé permet de calculer la somme des nombres de 1 à n.
n étant un entier naturel saisi dans le programme principal.


Vous retrouverez le programme ici

Exercice : demander à l'utilisateur de saisir un entier n. Créer une fonction récursive permettant de calculer n! et un programme permettant d'afficher sa valeur.

Graphisme


Pour tracer des courbes, dessiner, Python n’est pas suffisant, il faudra importer des bibliothèques comme NumPy, matplotlib ou pylab. ou uniquement des fonctions particulières en cas de besoin ponctuel.



Vous retrouverez le programme ici


Vous retrouverez le programme ici

Exercice : Tracer un cercle.

Les docstrings et doctests


Les docstings et doctests permettent non seulement de préciser comment utiliser des fonctions, mais ils permettent aussi de tester le code sur un ou plusieurs exemples préparés en amont de la programmation elle même.



Vous retrouverez le programme ici

Exercice : créer une fonction dont le paramètre sera un tableau de réels et qui retournera le plus grand élément du tableau. Il faudra réaliser un doctring et un doctest

Ressources