tp d` initiation à Python

publicité
Licence de Mathématiques
Université d’Angers
Année 2014-2015
tp d’ initiation à Python
Python est un langage de programmation. Il favorise la programmation structurée, fonctionnelle
et orientée objet. Le langage Python est placé sous une licence libre et fonctionne sur la plupart
des plates-formes informatiques, de Windows à Unix en passant par Mac OS, ou encore Android.
Son principal avantage est une syntaxe simple à utiliser. En effet, la syntaxe, clairement séparée des
mécanismes de bas niveau, permet une initiation aisée aux concepts de base de la programmation.
Ce langage est particulièrement répandu dans le monde scientifique, et possède de nombreuses
extensions destinées aux applications numériques. Depuis 2013, il est enseigné à tous les étudiants
de classes préparatoires scientifiques dans le cadre du tronc commun (informatique pour tous).
Son utilisation en statistique est devenue monnaie courante, grâce notamment à la distribution
Anaconda.
Mise en route, synthaxe
Pour se familiariser avec le langage, voici quelques instructions Python.
print "Bienvenue dans le langage Python !"
ma_variable=10+1
print ma_variable
mon_int=7
mon_float=1.23
mon_bool=True
un_carre=3**2
13/3
13%3
13./3
nom="Brian"
nom[0]
len(nom)
print nom+" est un ami"
print "2 et 2 font "+str(4)
2==3
2!=3
2<3
liste1=range(10)
liste1[2:4]
liste1[2:6:2]
liste1[:4]
liste1[::2]
liste1.append(20)
liste1.pop(3)
del(liste1[2])
liste2=[x**2 for x in liste1]
liste3=[x**2 for x in liste1 if x%2==0]
reponse=raw_input("Gauche ou Droite ? ")
reponse
Indentation, blocs, conditions
Une des particularités du langage Python est la suivante : les blocs sont identifiés par l’indentation,
au lieu d’accolades comme en R. Une augmentation de l’indentation marque le début d’un bloc, et
une réduction de l’indentation marque la fin du bloc courant, comme dans l’exemple suivant :
1
def spam():
oeufs = 12
return oeufs
print spam()
Une autre exemple avec une condition if :
reponse = "Paradis"
if reponse == "Paradis":
print "Bienvenue au Paradis !"
Un dernier exemple avec une boucle for :
liste=range(1,11)
for element in liste:
print element**2
Gestion des modules
Un module est un fichier ayant pour extension .py et qui contient des définitions de constantes/fonctions/classes. Tout programmeur Python peut réaliser un module. Il existe de nombreux modules dans la distribution Anaconda comme par exemple math, fractions, random ou encore
time.
Pour importer un module, il existe plusieurs méthodes. La plus simple (et conseillée) est
d’utiliser import. Toutes les constantes/fonctions/classes de votre module sont importées. Par
contre, leur utilisation doit être précédée d’un préfixe :
import math
math.sqrt(2)
math.exp(2)
Une autre solution est d’utiliser la commande from (pas besoin de préfixe pour les fonctions constantes/fonctions/classes importées) :
from math import sqrt,cos,pi
sqrt(2)
cos(pi/4)
On peut aussi utiliser la commande from module import * qui importe toutes les fonctions du
modules. La commande dir() renseigne tous les modules chargés alors que dir(module) affiche
toutes les fonctions de module. Pour obtenir de l’aide sur un module ou sur une fonction d’un
module, utiliser la commande help(module) ou help(module.fonction).
Exercices préliminaires
1. Compléter le code à trou pour construire la fonction signe:
def signe(x):
if
return 1
elif
return -1
else:
return 0
print signe(4)
2. Ecrire un petit programme homme/machine (H/M) nommé clinique() qui :
(a) souhaite à H la bienvenue dans la clinique
2
(b) demande à H de choisir entre la porte de droite et la porte de gauche (si l’utilisateur
choisi la porte de gauche, il se trouve dans la salle d’attente et s’il choisi la porte de
droite, il se trouve dans la salle d’opération).
(c) communique à H sa situation (salle d’attente ou salle d’opération) avec dans le deuxième
cas le message suivant : sortez vite !
3. Le problème de Syracuse : on part d’un nombre entier plus grand que zéro ; s’il est pair, on
le divise par 2 ; s’il est impair, on le multiplie par 3 et on ajoute 1. En répétant l’opération,
on obtient une suite d’entiers positifs dont chacun ne dépend que de son prédécesseur.
La conjecture de Syracuse, encore appelée conjecture de Collatz, conjecture d’Ulam, conjecture tchèque ou problème 3x+1 est l’hypothèse mathématique selon laquelle la suite de
Syracuse de n’importe quel entier strictement positif atteint 1. Après que le nombre 1 a été
atteint, la suite des valeurs (1,4,2,1,4,2. . . ) se répète indéfiniment en un cycle de longueur 3,
appelé cycle trivial.
En dépit de la simplicité de son énoncé, cette conjecture défie depuis de nombreuses années les
mathématiciens. Paul Erdős a dit à propos de la conjecture de Syracuse : « les mathématiques
ne sont pas encore prêtes pour de tels problèmes ». Faisons alors un peu d’algorithmique.
(a) Ecrire une fonction syracuse(entier) qui retourne la suite de Syracuse de entier.
(b) La carte d’identité d’un entier est définie par sa trajectoire (i.e. sa suite de Syracuse), sa
durée de vol (le nombre d’entier avant d’atteindre 1), et son altitude (l’entier maximal
dans sa trajectoire). Proposer une procedure qui affiche une telle carte, et trace la
trajectoire. Pour cela, importer le module pylab et utiliser la fonction plot(), puis show().
(c) ? Ecrire une fonction tri(liste) qui tri une liste d’entier par altitude décroissante.
4. On va faire un peu de statistique avec le module random :
(a) Importer le module random puis générer un échantillon gaussien N (µ, σ 2 ) de taille n =
100 avec µ = 10 et σ = 2 grâce à la fonction gauss().
(b) Ecrire une fonction moyenne(data), puis une fonction variance(data) et ecarttype(data)
qui calcule la moyenne/variance/écart type d’un échantillon data. Utiliser les listes en
compréhension.
(c) On va tester le générateur aléatoire d’un échantillon gaussien sous Python. Pour cela,
on rappelle une propriété essentielle de l’estimateur de la variance Sn2 : si X1 , . . . , Xn est
un échantillon i.i.d. de loi N (µ, σ 2 ), alors l’estimateur de la variance :
n
Sn2 :=
1X
(Xi − X̄n )2
n i=1
a pour espérance (n − 1)σ 2 /n.
i. Créer M = 10000 échantillon gaussien de taille n = 5 de moyenne µ = 4 et de
variance σ 2 = 2.
ii. Calculer une estimation de l’espérance de la variance empirique grâce aux M =
10000 échantillons. Retrouve-t-on la propriété décrite ci-dessus ?
(d) Sur les 100 000 électeurs d’une ville, 45700 s’apprêtent à voter pour le maire sortant, mais
celui-ci ne le sait pas. Alors il commande un sondage, et l’institut de sondage constitue
un échantillon de 100 habitants sur lesquels 52 disent vouloir voter pour le maire. Fou
de joie, celui-ci achète le champagne pendant la campagne, avant les élections, et se fait
battre lors des élections. Il accuse l’institut de sondage d’avoir triché.
i. Construisez une liste de "pour" et de "contre" représentant les 100000 électeurs de
la ville en question à l’aide de la fonction shuffle.
ii. Estimer la probabilité que sur un échantillon de taille 100, la majorité des électeurs
votent en faveur du maire sortant.
iii. Répéter le processus pour un échantillon de taille 1000.
3
Téléchargement