# Programmation Python/Modules
## Partie 1 - Introduction

* Avant-propos à l'attention des non-programmeurs
* Introduction
* Installation
* Éditeurs
* Programmer en deux minutes
** une messagerie instantanée
** un programme interfacé avec Wikipédia
** un serveur Web

## Partie 2 - Le langage

* Afficher un texte
* Structure d'un programme
* Variables
* Opérateurs
* Structures de contrôle
* Instructions répétitives
* Types
** Numériques
** Booléens
** Chaines de caractères
** Listes
** Tuples
** Dictionnaires
** Dates
** Ensembles
* Fonctions
* Modules
* Exercices
** Palindrome
* Regex
* Programmation orientée objet pour les non-programmeurs
* Classes
* Classes et Interfaces graphiques
* Fichiers
* Exceptions
* Bases de données
** Gestion
* L'interface CGI
* Applications web
* Réseau
* Threads

## Partie 3 - Les bibliothèques

* Bibliothèques pour Python
* L'interface graphique
* Utilisation de fenêtres et de graphismes
** Tkinter
** Widgets
** Turtle
* Les threads
* XML
* JSON
* Tests
* Analyse statique de programmes
* Fabric
* Le Web
** Django
** Karrigell
** Aiohttp

## Partie 1 - Introduction

* Avant-propos à l'attention des non-programmeurs
* Introduction
* Installation
* Éditeurs
* Programmer en deux minutes
** une messagerie instantanée
** un programme interfacé avec Wikipédia
** un serveur Web

## Partie 2 - Le langage

* Afficher un texte
* Structure d'un programme
* Variables
* Opérateurs
* Structures de contrôle
* Instructions répétitives
* Types
** Numériques
** Booléens
** Chaines de caractères
** Listes
** Tuples
** Dictionnaires
** Dates
** Ensembles
* Fonctions
* Modules
* Exercices
** Palindrome
* Regex
* Programmation orientée objet pour les non-programmeurs
* Classes
* Classes et Interfaces graphiques
* Fichiers
* Exceptions
* Bases de données
** Gestion
* L'interface CGI
* Applications web
* Réseau
* Threads

## Partie 3 - Les bibliothèques

* Bibliothèques pour Python
* L'interface graphique
* Utilisation de fenêtres et de graphismes
** Tkinter
** Widgets
** Turtle
* Les threads
* XML
* JSON
* Tests
* Analyse statique de programmes
* Fabric
* Le Web
** Django
** Karrigell
** Aiohttp
[ Modifier le sommaire ]

## Définition

Vous avez déjà rencontré des fonctions intégrées au langage lui-même, comme la fonction len, par exemple, qui permet de connaître la longueur d'une chaîne de caractères. Les fonctions intégrées au langage sont relativement peu nombreuses : ce sont seulement celles qui sont susceptibles d'être utilisées très fréquemment. Les autres sont regroupées dans des fichiers séparés que l'on appelle des modules.
Les modules sont donc des fichiers qui regroupent des ensembles de fonctions. En effet, il peut être commode de découper un programme important en plusieurs fichiers de taille modeste pour en faciliter la maintenance et le travail collectif. Une application Python typique sera alors constituée d'un programme principal accompagné de un ou plusieurs modules contenant chacun les définitions d'un certain nombre de fonctions accessoires.
Il existe un grand nombre de modules pré-programmés qui sont fournis d'office avec Python. Vous pouvez en trouver d'autres chez divers fournisseurs. Souvent on essaie de regrouper dans un même module des ensembles de fonctions apparentées que l'on appelle des bibliothèques.
Un module peut être appelé depuis plusieurs programmes, il s'agit d'un fichier .py commençant par son identité (qui ne contient pas de point).
N'importe quel fichier .py peut donc être appelé depuis un autre comme un module. Il peut contenir :
    du script
    des fonctions
    des classes

## Importer un module

Pour utiliser des fonctions de modules dans un programme, il faut au début du fichier importer ceux-ci.
Pour ce faire, utiliser la commande "import" :
Sur la même ligne (syntaxe déconseillée) :
Ou encore en sélectionnant certains ou tous les éléments d'un fichier :
À noter : cette dernière méthode est dangereuse, car des objets du module portant le même nom que des objets du programme peuvent s'écraser l'un l'autre. Mieux vaut donc les nommer explicitement :
Le module math, par exemple, est fournit avec Python, et contient les définitions de nombreuses fonctions mathématiques telles que sinus, cosinus, tangente, racine carrée, etc. Pour pouvoir utiliser ces fonctions, il vous suffit d'incorporer la ligne suivante au début de votre script :
Dans le corps du script lui-même, vous écrirez par exemple :
racine = sqrt(nombre) pour assigner à la variable "racine" la racine carrée de nombre, sinusx = sin(angle) pour assigner à la variable "sinusx" le sinus de angle (en radians !), etc.

## Modules personnalisés

Pour créer son propre module et l'importer dans un autre fichier, il faut :
* Soit que le module existe sous la forme d'un fichier .py situé dans le même dossier que le fichier qui l'importe. Exemple :
Pour changer le préfixe :
Pour supprimer le préfixe :
* Soit qu'il soit dans un autre dossier du programme, contenant un fichier __init__.py joutant le rôle de relais en important tous fichiers situés à côté de lui, ce qui permettra à toutes les fonctions de ce dossier d'être accessibles par le nom du dossier. Exemple dans un dossier "lib" :
Dans le dossier parent :

## Liste des modules standards

Les modules standards les plus importants sont :
* cgi
* math
* os
* pickle
* random
* re
* socket
* sys
* time
* urllib

### Exemple du module "math"

L'exécution de ce script provoque l'affichage suivant :
Ce court exemple illustre déjà fort bien quelques caractéristiques importantes des fonctions :
* une fonction apparaît sous la forme d'un nom quelconque associé à des parenthèses. Exemple : sqrt
* dans les parenthèses, on transmet à la fonction un ou plusieurs arguments. Exemple : sqrt(121)
* la fonction fournit une valeur de retour (on dira aussi qu'elle « renvoie » une valeur). Exemple : 11.0
Nous allons développer tout ceci dans les pages suivantes. Veuillez noter au passage que les fonctions mathématiques utilisées ici ne représentent qu'un tout premier exemple. Un simple coup d'œil dans la documentation des bibliothèques Python vous permettra de constater que de très nombreuses fonctions sont d'ores et déjà disponibles pour réaliser une multitude de tâches, y compris des algorithmes mathématiques très complexes (Python est couramment utilisé dans les universités pour la résolution de problèmes scientifiques de haut niveau). Il est donc hors de question de fournir ici une liste détaillée. Une telle liste est aisément accessible dans le système d'aide de Python :
    Documentation HTML ® Python documentation ® Modules index ® math
Au chapitre suivant, nous apprendrons comment créer nous-mêmes de nouvelles fonctions.
Exercices
    (Note : Dans tous ces exercices, utilisez la fonction raw_input pour l'entrée des données)
* Écrivez un programme qui convertisse en mètres par seconde et en km/h une vitesse fournie par l'utilisateur en miles/heure. (Rappel : 1 mile = 1609 mètres)
* Écrivez un programme qui calcule le périmètre et l'aire d'un triangle quelconque dont l'utilisateur fournit les 3 côtés. (Rappel : l'aire d'un triangle quelconque se calcule à l'aide de la formule : $S={\sqrt {d\times (d-a)\times (d-b)\times (d-c)}}$ dans laquelle d désigne la longueur du demi-périmètre, et a, b, c celles des trois côtés).
* Écrivez un programme qui calcule la période d'un pendule simple de longueur donnée. La formule qui permet de calculer la période d'un pendule simple est $T=2\pi {\sqrt {\frac {l}{g}}}$, l représentant la longueur du pendule et g la valeur de l'accélération de la pesanteur au lieu d'expérience.
* Écrivez un programme qui permette d'encoder des valeurs dans une liste. Ce programme devrait fonctionner en boucle, l'utilisateur étant invité à entrer sans cesse de nouvelles valeurs, jusqu'à ce qu'il décide de terminer en frappant <enter> en guise d'entrée. Le programme se terminerait alors par l'affichage de la liste. Exemple de fonctionnement : Veuillez entrer une valeur : 25 Veuillez entrer une valeur : 18 Veuillez entrer une valeur : 6284 Veuillez entrer une valeur : [25, 18, 6284]
Solution
* # Conversion de miles/heure en km/h et m/s print "Veuillez entrer le nombre de miles parcourus en une heure : ", ch = raw_input # en général préférable à input mph = float(ch) # conversion de la chaîne entrée en nombre réel mps = mph * 1609 / 3600 # conversion en mètres par seconde kmph = mph * 1.609 # conversion en km/h # affichage : print mph, "miles/heure =", kmph, "km/h, ou encore", mps, "m/s"
* # Périmètre et Aire d'un triangle quelconque from math import sqrt print "Veuillez entrer le côté a : " a = float(raw_input) print "Veuillez entrer le côté b : " b = float(raw_input) print "Veuillez entrer le côté c : " c = float(raw_input) d = (a + b + c)/2 # demi-périmètre s = sqrt(d*(d-a)*(d-b)*(d-c)) # aire (suivant formule) print "Longueur des côtés =", a, b, c print "Périmètre =", d*2, "Aire =", s
* Réfléchissez !
* # Entrée d'éléments dans une liste tt = # Liste à compléter (vide au départ) ch = "start" # valeur quelconque (mais non nulle) while ch != "": print "Veuillez entrer une valeur : " ch = raw_input if ch != "": tt.append(float(ch)) # variante : tt.append(ch) # affichage de la liste : print tt

## Références

* ↑ (anglais) http://docs.python.org/2/tutorial/modules.html
* ↑ https://www.python.org/dev/peps/pep-0008/#imports
* ↑ http://www.python.org/doc/