• Aucun résultat trouvé

1.Fonctions de baseCréez un module Python

N/A
N/A
Protected

Academic year: 2022

Partager "1.Fonctions de baseCréez un module Python"

Copied!
2
0
0

Texte intégral

(1)

IUT ORSAY Page 1 2013-2014

Mesures physiques Semestre S'1

Partiel d'Informatique Scientifique Moyenne, médiane, quantile

Tout document papier ou électronique local autorisé.

Documents (cours, poly TP, docs…) disponibles sur la machine de TP.

Vous devez créer un répertoire de partiel SP1C2_Nom_Prenom1 dans votre répertoire personnel, il devra contenir les fichiers modules Python que vous écrirez. Les modules devront comporter les en- têtes habituels, le code devra être documenté/commenté et testé, les résultats d'exécution être copiés/collés dans une chaîne """…triple quote…""" à la fin des modules.

Lorsque vous avez terminé ou que le temps imparti est fini, vous devez recopier ce répertoire

SP1C2_Nom_Prenom dans le répertoire srva018/FichiersEtudiants/ et attendre que l'ensei- gnant vous confirme qu'il a bien été recopié.

La notation tiendra compte du respect strict des consignes sur le travail demandé, de la qualité des chaînes de documentation et des commentaires, de la pertinence des tests et de leur affichage reco- pié à la fin des modules Python.

Si vous n’arrivez pas à coder l’algorithme d’une fonction, essayez de faire qu’elle simule au moins un fonctionnement (retour d'une valeur de bon type mais bidon), et passez à la suite.

Lorsque vous avez besoin d'un service déjà rendu par une fonction, vous êtes censé appeler cette fonction et utiliser le résultat retourné – et pas dupliquer son code.

1. Fonctions de base

Créez un module Python moy.py dans votre répertoire de partiel.

Dans ce module, définissez les fonctions suivantes :

fonction moy_val(p_a, p_b) qui prend en paramètre deux valeurs numériques et retourne la moyenne de ces valeurs (on considère que les valeurs sont de type valide sans faire de contrôle).

Fonction moy_liste(p_lst) qui prend en paramètre une liste de valeurs numériques et retourne la moyenne de cette liste (on considère que la liste n'est pas vide et qu'elle contient des valeurs numériques sans faire de contrôle). Calculez cette moyenne à l'aide de l'algorithme de votre choix.

Fonction lecture_fic(p_nom) qui prend en paramètre une chaîne de caractères correspon- dant à un nom de fichier, charge le contenu de ce fichier texte (représentation textuelle de nombres flottants, avec une valeur par ligne), et retourne les valeurs contenues sous la forme d'une liste de flottants (on considère que le fichier existe et contient bien la représentation tex- tuelle de nombres flottants sans faire de contrôle).

Fonction moyenne_fic(p_nom) qui prend en paramètre une chaîne de caractères correspon- dant à un nom de fichier texte contenant un nombre flottant sur chaque ligne, et retourne la moyenne des valeurs de ce fichier.

Fonction calcul_moyennes(p_lstnoms, p_nomres) qui prend comme paramètres une liste de chaînes correspondant à des noms de fichiers à traiter (fichiers contenant des valeurs numériques), et une chaîne correspondant au nom du fichier résultat. Pour chacun des fichier à traiter, la fonction écrit dans le fichier résultat une ligne contenant : le nom du fichier traité suivi de « : » puis de la moyenne des valeurs de ce fichier.

Placez le code de test de ces fonctions, basé sur des cas simples (donc vérifiables de tête) à la fin du module dans un bloc if__name__=='__main__':.

Pour le fichier de test, créez un fichier nommé testlect.txt que vous placez à côté du module et qui contient cinq lignes avec les valeurs 1, 3, 2, 9 et 5.

Pour le test de calcul_moyennes(), donnez comme liste de noms de fichiers une liste contenant 100 fois la chaîne "testlect.txt" (qu'on peut construire avec ["testlect.txt"]*100), et comme nom de fichier résultat testres.txt.

1 En utilisant votre nom et votre prénom bien sûr.

(2)

IUT ORSAY Page 2 2013-2014

Mesures physiques Semestre S'1

2. Calcul de médiane

Rappel : La valeur médiane est la valeur située à l'index du milieu de la liste des valeurs lorsqu'on ordonne celles-ci (si l'index du milieu tombe entre deux valeurs, on prendra la moyenne de ces deux valeurs).

Exemple 1 : série de valeurs 11, 8, 12, 7, 4.

Il faut ordonner les valeurs : 4, 7, 8, 11, 12 et prendre la valeur qui se trouve au milieu. Avec cet exemple comportant un nombre impair de valeurs, on trouve directement la valeur 8.

Exemple 2 : série de valeurs 12.4, 12.8, 12.0, 12.6, 12.9, 15.

Il faut ordonner les valeurs : 12.0, 12.4, 12.6, 12.8, 12.9, 15 et prendre la valeur qui se trouve au milieu. Avec cet exemple comportant un nombre pair de valeurs, le milieu tombe entre les valeurs 12.6 et 12.8, on fait la moyenne de ces deux valeurs et on trouve 12.7.

Créez un module Python med.py dans votre répertoire de partiel. Ce module devra utiliser les fonc- tions déjà définies dans moy.py en les important lorsqu'elles peuvent être utiles (ex. from moy

importnomfonction).

Dans ce module, définissez tout d'abord la fonction suivante :

Fonction mediane(p_lst) qui prend en paramètre une liste de valeurs numériques et retourne la valeur médiane de cette liste. Attention, la fonction ne doit pas modifier la liste qui lui est passée en paramètre.

Vous testerez cette fonction avec les listes de valeurs données dans l'exemple ci-dessus, puis en l'appli- quant aux données lues à partir du fichier testlect.txt qui a déjà été utilisé pour le module moy.py (vous pourrez comparer la moyenne des valeurs de ce fichier avec la médiane).

Nous allons maintenant généraliser ce genre de calcul à n'importe quel quantile2 (décile, quartile…), c'est à dire permettre de trouver la valeur qui se trouve à une position relative dans une liste ordonnée de données. On utilisera un nombre flottant représentant un pourcentage (de 0 à 1) pour donner cette position.

Définissez, toujours dans le module med.py, la fonction suivante :

Fonction quantile(p_lst, p_seuil) qui prend en paramètre une liste de valeurs numé- riques et retourne la valeur du quantile dont l'index relatif est donné par un nombre flottant dans le second paramètre. Comme pour le calcul de médiane, la fonction ne doit pas modifier la liste. La difficulté réside dans le calcul des index (p_seuil est donné entre 0.0 et 1.0 et il faut calculer un index entre 0 et len(p_lst)-1) et la distinction entre le cas où on tombe directement sur un index entier, donc sur une valeur à cet index, et le cas où on tombe sur un index avec une partie décimale et où il faut faire la moyenne3 des deux valeurs contiguës autour de l'index – rappel/attention : l'indexation avec la notation [] utilise des nombres entiers, n'oubliez pas les conversions de types.

Pour tester cette fonction, vous pouvez utiliser une liste construite avec list(range(1,101)). Vous pouvez comparer la valeur que vous obtenez en utilisant p_seuil à 0.5 avec la valeur obtenue via l'appel de la fonction mediane(). Vous devrez tester bien sûr les cas limites, avec des p_seuil à 0.0 et à 1.0 - typiquement les cas qui soulèveront les problèmes d'indexation. Attention au piège, en Python un index -1 est valide, il indexe la dernière valeur.

2 Ou encore appelé « fractile ».

3 L'idéal serait de faire une interpolation linéaire permettant de mettre un « poids » sur chacune des valeurs contiguës – là on simplifie en mettant un poids de 0,5 à chaque valeur (donc une moyenne).

N Valeurs par ordre croissant Index

0 N-1

0

Position relative

1

entière avec décimale

4 7 9 12 13 14 19 21 22 25 30 45 46 50 53 54 61

Cela a plus de sens avec un (très) grand nombre de valeurs – là c'est un TP.

Références

Documents relatifs

(1 pt) Quelle sont les points de similarité entre les individus de la même classe et les points de dissimilarité entre les individus de classes

Ecrire une script Python qui prend en argument un fichier texte et qui renvoie un fichier texte avec le contenu du fichier texte mais sans les sauts de lignes.. Ecrire un script

Certes, on peut créer une liste des fréquences d'après seulement quelques pages; mais nous n'avions sous la main que des textes en grec ancien, dont les désinences sont

public static void lireEnreg (String nomFichier) Lit dans le fichier client client dont le nom est passé en paramètre, un enregistrement et affiche sur la console les informations

Écrire une fonction relecture qui prend comme paramètre un nom de fichier (chaîne de caractères), un tableau de réels, puis qui place dans le tableau les valeurs présentes dans

Créer une fonction Lecture1 qui prend comme paramètres un nom de fichier (chaîne de caractères) nom et qui renvoie la liste des valeurs lues dans le fichier2. (on suppose que le

Écrire une fonction Lecture qui prend comme paramètre un nom de fichier (chaîne de caractères) et renvoie la liste des valeurs présentes dans le fichier (à raison d’une valeur

Ecrire une fonction Lecture qui prend comme paramètres une chaîne de caractères nomfichier et un tableau de réels Epreuve, puis qui relit dans le fichier dont le nom est contenu