Thème: Langage de programmation

LP1: Tp en python sur affectation et grammaire des fonctions

I/ Python 17/09

A/ Quelques informations

Python est un langage de programmation développé à partir de 1989 par Guido van Rossum.

Son langage de programmation est :

Langage interprété ?

Dans un langage interprété : le code que vous écrivez est interprété, en gros, ligne à ligne, par un logiciel qu'on appelle interpréteur. Celui-ci va utiliser le code source et les données d'entrée pour calculer les données de sortie.

1

D'autres langages (comme le C, ...) sont compilés : le code que vous écrivez est d'abord compilé par un logiciel qu'on appelle compilateur en une succession de 0 et de 1. Le système d'exploitation utilise ce code compilé ainsi que les données pour calculer les données de sorties.

2

L'intérêt principal d'un langage interprété est la portabilité de votre programme : il marche quelle que soit la configuration de votre ordinateur. Le principal défaut est que l'exécution d'un programme interprété est souvent plus lente que le même programme écrit dans un langage complié.

Environnement de travail

Il existe de nombreux environnements de travail pour programmer en Python. En voici deux :

II/ Affectation

Remarques

Pendant l’exécution d’un programme, les données que ce dernier manipule sont stockées en mémoire centrale. En nommant ces données, on peut les manipuler beaucoup plus facilement.
Les variables nous permettent donc de manipuler ces données sans avoir à se préoccuper de l’adresse explicite qu’elles occuperont effectivement en mémoire. Pour cela, il suffit de leur choisir un nom ou identificateur.

  1. Les identificateurs sont des suites de lettres, de chiffres et de tirets bas (alt gr + 8), le premier caractère ne pouvant être un chiffre.
  2. Attention à ne pas choisir comme identificateur des mots-clés ou de types comme for, int, ...

L’interpréteur est un programme qui traduit les lignes de code en langage Python en un langage directement compréhensible par l'ordinateur : le langage machine. L'interpréteur s’occupe d’attribuer une adresse à chaque variable et de superviser tous les éventuels futurs changements d’adresse.

Une variable peut etre assimiler a une boite aux lettres portant un nom.

Propriété

En langage Python, l'affectation sera notée à l'aide du symbole égal : =. On note ainsi l'affectation de 5 à x : x = 5

Remarques

Attention ! En écrivant ceci, on n'exprime pas une égalité mais l'interpréteur exécute les actions suivantes :

Ainsi, en python, on peut lire x=5 comme : "x est lié à un objet de type int dont la valeur est 5".

Remarques

Même si Python est un langage non typé, on peut tout de même préciser le type directement ainsi : x:int = 5.
De même, l'instruction: >>>x = x+1
est très fréquente en informatique en revanche, elle est inacceptable en mathématiques.

Propriété

De plus, à chaque variable correspond un identifiant, un numéro qui identifie une case mémoire. En Python, il est possible de connaître :

Exercice 1

1ère case: Saisir le code
L'identification n'est pas la meme entre chaque eleves qui a executer le code

2eme case: Saisir le code

3eme case: b est un entier

exercice1, 1er

4eme case: Saisir code

5, 6, 7 cases: b est une chaine de charactere

exercice1,2eme
A retenir
Remarques
ex3 ex4

III/ Affichage et Saisie

A/ Affichage

Propriété

La fonction print permet d'afficher les éléments mis entre parenthèses.

La fonction print peut prendre plusieurs arguments séparés par une virgule ,
Cela permet ainsi d'afficher un mélange de texte et de contenu de variables.

Exemple
exemple2

Propriété

Transformer les espaces:
Vous avez dû remarquer avec l'exemple précédent qu'à l'exécution, un espace ' ' ou " " est automatiquement ajouté entre chaque argument de la fonction print. Ce comportement peut être modifié par l'ajout d'un argument identifié par le nom sep, de type chaîne de caractères (str en Python).

Exemple : on teste l'instruction suivante
exemple3

Propriété

Aller à la ligne dans un print:
Le chaîne de caractères \n sert à passer à la ligne lors de l'affichage. Ainsi, dans l'utilisation suivante, les arguments affichés sont placés les uns en dessous des autres :

Exemple
exemple4

Exercice : Réaliser l'affichage suivant en n'utilisant qu'un seul \n : Mots, et, valeur, 3.14159, à afficher.
ex2

A retenir

B/ Saisie

Propriété

input
La fonction input permet d'obtenir une saisie depuis le clavier.

Exercice 3: tester chaque code suivant
ex3

Remarques

Attention ! La fonction input renvoie toujours une chaîne de caractères (son type est bien str) même si un nombre (entier ou réel) a été saisi. Pour pouvoir utiliser le renvoi dans un calcul, il est parfois nécessaire de changer son typage à l'aide des fonctions int ou float qui permettent de transformer respectivement une chaîne de caractères correspondant à un nombre en nombre entier ou nombre réel (un flottant pour être précis).

A retenir

IV/ Les Fonctions 21/09

A/ Notion

Definition

Fonctions en informatique

En informatiques, les fonctions servent à mieux structurer votre code. Par exemple, elles permettent d'éviter de répéter plusieurs fois des portions de codes identiques. Ainsi, une fonction peut être vu comme un «petit» programme :

Une fonction qui modifie des variables mais sans renvoyer de résultat est appellée une procédure. Le langage Python ne fait pas de différence dans la syntaxe entre fonction et procédure.

Remarques

Une fonction qui renvoie un booléen est aussi appelé un prédicat.

B/ En Python

Definition

Fonctions en python

En Python, une fonction est définie (= être créée) en suivant toujours le même formalisme :

  1. Commencer par le mot clé def,
  2. Poursuivre sur la même ligne par l'entête constituée des 3 éléments successifs suivants :
    1. le nom de la fonction
    2. entre parenthèses, de 0 à N paramètres avec pour chacun un nom
    3. Terminer obligatoirement la première ligne par deux points :
  3. En dessous, écrire le blocs des instructions. Attention il faut indenter (=décaler) ce bloc !
  4. Finir en dernière ligne par le mot clé return suivi de ce que renvoie la fonction (ou None si la fonction ne retourne rien). Attention, cette ligne est indentée également et marque la fin de la fonction.

Voici visuellement la structure d'une fonction en Python :

5

Exemple: Voici la fonction carrée :
exemple5

Remarques
Propriété

Appel de fonction

Une fonction est utilisée comme une instruction quelconque. Un appel de fonction est constitué du nom de la fonction suivi entre parenthèses des valeurs des paramètres d'entrée. Cet appel peut être fait :

6 7
Definition

Remarque

Il peut vous être utile d'utiliser les deux opérateurs // et % définis ainsi :
a // b renvoie le quotient de la division euclidienne de a par b.
Par exemple: 13 // 5 renvoie 2 car 13 = 5 × 2 + 3.
a % b renvoie le reste de la division euclidienne de a par b.
Par exemple: 13 % 5 renvoie 3 car 13 = 5 × 2 + 3.

C/ Bonnes pratiques de programmation

Préciser le typage de chacun des paramètres

Le langage Python est plus aisé pour démarrer la programmation pour la concision des codes écrits et pour la gestion automatique du typage par l'interpréteur. Cependant, le but est que vous puissiez à terme être capable de faire basculer vos compétences acquises en NSI sur Python vers d'autres langages de programmation.

Comme la plupart des langages de programmation nécessitent la spécification du typage des variables, à terme, on vous demandera d'écrire en Python, une fonction en précisant le type de chaque antrée et sortie en suivant le même formalisme que ci-dessous :

def

La convention PEP8 donne l'habitude de nommer les fonctions (comme les variables) avec des lettres minuscules des tirets bas (celui du "8") _. Pour clarifier la fonction, il est conseillé d'utiliser un verbe dans son nom (obtenir, donner, get, set, ...).

Documenter ses fonctions

Il est important de documenter vos fonctions, c'est-à-dire de décrire en quelques phrases le rôle de la fonction, de donner des informations sur la fonction, le lien entre les entrées et la sortie.

Pour cela, juste en dessous de la première ligne définissant la fonction, il suffit de mettre ses informations entre """ et """ ; c'est ce que l'on appelle en franglais le docstring de la fonction). En reprenant l'exemple précédent (sans le typage), on peut écrire :

Exemple
8

L'intérêt de l'auto-documentation d'une fonction par un texte est double :

Exemple
Exemple9

D/ Utilisation de modules

Nous avons déjà vues les fonctions print et input. Ce sont deux fonctions prédéfinies dans le langage Python, On appelle ce type de fonction des fonctions natives au langage Python , elles sont directement utilisables.
D'autres fonctions ont été développées et testées par différents programmeurs mais ne sont pas directement utilisables. Ces fonctions sont regroupées dans des modules, appelés aussi bibliothèques. En terminale, vous apprendrez même à en créer par vous même !

Pour pouvoir utiliser ces fonctions, il faut d'abord importer ces modules. Pour cela, il y a plusieurs méthodes :

V/ La portée des variables 28/09

Il faut faire la différence entre les variables utilisé dans le programme (variables globales) et les variables utilisées dans une fonction (variables locales).
Vous allez comprendre cela à l'aide des exemples de l'exercice suivant :

Exercice 7:
Ecrire dans un jupyter les trois fonctions suivantes puis faire des appels avec différentes valeurs de x pour observer les différences entre ces codes :
Ici, ni les types ni la documentation n'ont été écrites afin de faciliter la vision de la différence entre variable locale et variable globale.

exercice7
A savoir

Normalement vous avez dû détecter un problème : il y a une fonction qui ne peut pas être interprétée !
Il faut privilégier les variables locales. La première écriture, celle de carre est la définition à privilégier.
Vous pouvez utiliser des variables globales, comme mais dans carre3, des cas qu'il faudra bien définir en amont.
Le danger des variables globales est quelle peuvent être modifiée à différents endroits d'un programme ce qui plus difficile la prévision du comportement du programme, dès que celui-ci devient assez conséquent.
En résumé, pour l'instant, pas de variables globales .

Exercice 8
1.Voici une fonction augmenter_score qui prend comme paramètre d'entrée les points à rajouter et renvoie le nouveau score obtenu.
Combien de variables apparaissent dans la fonction nouveau_score ? De quel type ? ex8 2.Exécuter le script suivant : ex 8

Remarque:

Rajouter un paramètre à la fonction peut-être très utile pour supprimer une variable globale.

A retenir

VI/ Précondition et postconditions en Python

A/ Précondition

Voici le code en Python d'une fonction nommée get_unite qui prend comme paramètre un nombre entier et qui renvoie son chiffre des unités.

ex1

Une documentation a été donnée afin d'expliciter le bon usage de la fonction. Mais on ne pas être certain qu'un utilisateur de la fonction respectera les contraintes implicites ou explicites de la documentation et du typage. Voici quelques exemples d'appel de la fonction :

ex2

On voit que l'appel conduit à une réponse à chaque fois, mais que celle-ci ne correspond pas toujours à ce qui est attendu. Pour rendre "robuste" la fonction précédente, on doit vérifier au début de celle-ci certaines contraintes de bon usage que l'on appelle précondition .
Dans l'exemple précédent, ces préconditions sont :

Pour cela, le langage Python possède l'instruction assert qui permet un mécanisme d'assertion. Les deux préconditions précédentes s'ajoutent à la fonction précédente ainsi :

ex3
Quelques explications:

Vous pouvez retrouver ici une petite vidéo qui synthétise les appels de modules, les docstring et les assert

B/ Postcondition

Souvent les fonctions sont appelées au cours de programme ; le type et la qualité du résultat renvoyé est important pour ne pas conduire à un plantage. Des contraintes sur la variable renvoyée sont souvent nécessaires : on les appellent les postconditions.

Reprenons l'exemple précédent :

ex3

Voici le résultat de quelques appels effectués :

ex2

Comme le résultat renvoyé doit être un nombre entier compris entre 0 et 9, on va rajouter les postconditions suivantes :

On utilise encore l'instruction assert, juste avant le return pour écrire ces postconditions comme montré ci-dessous :

ex4
Remarque

VII/ TP à réaliser

Document d'aide

Si vous rencontrez des difficultés sur l'utilsation de Jupyter pour :

Remarque (exercice13)

La possibilité de stocker un entier dans une variable stockant initialement une chaîne de caractères est possible en Python car c'est un langage non typé : l'interpréteur gère automatiquement le typage. Attention ! Dans beaucoup d'autres langages de programmation, cela n'est pas possible.

Remarque (exercice15)

La longueur d'une chaîne de caractères (c'est-à-dire le nomnbre de caractères) nommée chaine en Python s'obtient avec la commande len(chaine).

VIII/ QCM 28/09

QCM 1

qcm1

QCM 2

qcm2

QCM 3

qcm3

QCM4

qcm4

QCM5

qcm5

LP2: Tp en python de structure conditionnelle

Exercice 28/09 a ranger

exercice1
exercice3
exercice4
exercice4
exercice5
exercice6
exercice6
exercice6
exercice7

LP3: Tp en python de boucles 12/10

Exercice 2 15/10

Écrire une procédure table_multiqui reçoit en entrée un nombre entier n compris entre 0 et 10 et affiche en sortie la table de multiplication de ce nombre.

exercice2

Exercice 3

À la naissance de Crésus, son grand-père Midas, lui ouvre un compte bancaire. Ensuite, à chaque anniversaire, le grand père de Crésus verse sur son compte 100 €, auxquels il ajoute le double de l’âge de Crésus. Par exemple, lorsqu’elle a deux ans, son grand-père lui verse 104 € ce qui fait un total versé de 100+102+104=306 € à la deuxième année. Écrire une fonction tresor() qui en entrée reçoit un entier n et en sortie renvoie la somme présente sur le compte de Crésus à sa n ième année écoulée entièrement.

exercice3

Exercice 17

Écrire un code qui affiche toutes les manières possibles d’obtenir un euro avec des pièces de 2 cents, 5 cents et 10 cents. Faire aussi afficher combien de possibilités ont été ainsi trouvées.

exercice 17

Exercice 5

Que fait le code?

Puis transformer le code pour qu'il compte le nombre de i.

exercice5

Exercice 6

1. Écrire une fonction est_dans_liste qui prend en paramètres une liste lst et un entier n et qui renvoie True si l'entier est dans la liste et False sinon.
2. Tester la fonction est_dans_liste, entre autres, est_dans_liste([8,4,7,2,5,4],6) renvoie False et est_dans_liste([8,4,7,2,5,4],4) renvoie True.
3. Proposer au moins deux autres tests pour valider cette fonction sous forme de postconditions.

exercice6

Exercice 19

Écrire une fonction produit qui prend comme paramètre un entier naturel n et renvoit le produit de tous les nombres entiers compris entre 1 et n. Exemple : pour produit(4) renvoie 24 car P= 1 × 2 × 3 × 4 = 24.

exercice19

02/11

Exercice 8

ex8
ex8.2

05/11

Exemple 10

En utilisant une boucle while, écrire une fonction est_dans_liste2 qui prend en paramètres une liste lst et un entier n et qui renvoie True si l'entier est dans la liste et False sinon.

ex10

Exercice 11

Vous allez programmer un jeu de nombre à deviner contre un ordinateur. Pour commencer l'ordinateur va choisir au hasard un nombre compris entre 1 et 100. Ensuite, l'utilisateur doit alors deviner ce nombre comme ceci : l'utilisateur propose un nombre, l'ordinateur lui dit s'il est trop petit ou trop grand, et ainsi de suite jusqu'à ce que l'utilisateur ait trouvé le bon nombre.

ex11

Exercice 9

Une association militant pour la sauvegarde d'une espèce protégée fait appel à un financement participatif. Cette association a besoin de 13500€ pour mener à bien sa campagne annuelle. Elle aimerait savoir combien de jours seront nécessaires pour obtenir la somme de 13500€ en fonction de la somme moyenne recueillie sur le site. Elle fait appel à vous afin que vous lui créiez un programme répondant à la question.

ex9

QCM 09/11

QCM 4

QCM4

QCM 5

qcm5

voici d'autre exemple 09/11

exemple