par un débutant pour des débutants - créer un blog...

27
Par un débutant pour des débutants Par un débutant pour des débutants 12/22/2012 1 Présentation de Python niveau débutant.

Upload: others

Post on 19-Jan-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Par un débutant pour des débutantsPar un débutant pour des débutants

12/22/2012 1Présentation de Python niveau débutant.

Page 2: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Python rapide historique

Références wikipedia : Guido Van Rossum né le 31 janvier 1952, nééairlandais créateur de Python.� 1989 début de Python.�février 1991, première version publique 0.9.02000 Python 1.6.1 licence GPL

12/22/2012 2Présentation de Python niveau débutant.

�2000 Python 1.6.1 licence GPL�2001 début de la version 2. En 2010 la v2.7 a de nombreuses bibliothèques.�2008 début de la version 3. En 2012 la v3.2 a de nombreuses bibliothèques.�Dernière version : Septembre 2012 v3.3�Au fait pourquoi Python ?

Page 3: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

12/22/2012 Présentation de Python niveau débutant. 3

Page 4: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Objectif de cet exposé� Présenter Python par un non spécialiste à un public non spécialiste mais utilisant déjà l’informatique : Maple (pas un langage), Scilab, Turbo Pascal ……. �Présentation à l’aide de petits exemples des principes de base de Python. �Premier exercice manipulations de fichiers : fichier texte, puis binaire .

12/22/2012 Présentation de Python niveau débutant. 4

�Premier exercice manipulations de fichiers : fichier texte, puis binaire .� Présentation à l’aide de petits exemples de numpy et matplotlib.pyplot.� Premiers exercices avec numpy et matplotlib. Notions mathématiques niveau TS –PCSI.� Pas de TP individualisé.�Pas de programmation orientée objet.

Document joint avec l’exposé : resume utilisation python.pdf

Page 5: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Faisons connaissance avec Python

Lequel choisissez vous ?

12/22/2012 Présentation de Python niveau débutant. 5

Python nu Python avec IDE

Page 6: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Algorithmique élémentaire. Traduction en Python.

�Comment écrire et enregistrer un algorithme en Python ? J’utiliserai dans cette présentation l’IDE « IDLE » (humour anglais !) c’est l’éditeur fourni avec Python.�Les commentaires : Ils sont précédés de #. � Les Entrées sorties : les commandes input et print pour commencer. Attention différence de syntaxe entre v2.7 et v3.2 �Affectation de données à des variables. Les types classiques.

12/22/2012 Présentation de Python niveau débutant. 6

�Affectation de données à des variables. Les types classiques. �Les blocs d’instruction : Conditionnels . Si …alors …sinon… fin de si.Boucles conditionnelles. Tant que … faire … fin de tant que.Boucles de type compteur. Pour compteur dans …. Faire … fin de faire.

Page 7: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Affectation de données à des variables.

L’affectation est représentée par nom_variable = donneesPour les usagers de Maple : Python « de base » n’est pas formel, il faut donc oublier l’affectation à des variables d’une expression de variables non affectées.

Exemples :>>> a = 1 >>> a = a + 1 (ou a+=1) >>> print(a)

12/22/2012 Présentation de Python niveau débutant. 7

Multi affectation :>>> a,b,c = 1,1,2 >>> a,b,c =b,c,b+c >>>print(a,b,c)

Page 8: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Type des données affectées aux variables. Types simples

Type booleenValeurs : True , False>>> type(True) >>> <class,’bool’> Opérations sur les booléens : not, and, or , ^ (le xor), == (le =) , != (le ), <, >, <= (le ) , >=

Type entier Je crois que depuis v3 les entiers sont du type long.>>>type(5) #renvoie <class ‘int’>

12/22/2012 Présentation de Python niveau débutant. 8

>>>type(5) #renvoie <class ‘int’>Opérations sur les entiers : +, *, ** (le ^) , /, //, resp % (quotient respectivement reste de la division euclidienne)

Type réel>>>type(3.14) # renvoie <class ‘float’>Opérations sur les réels : +, *, **, /, mais aussi // et % (olé olé ?)Exemple : >>>a = ½ - 2/5 >>>a # gênant non ?

Type complexe >>>type(1+1j*2) # renvoie <class ‘complex’>Opérations sur les complexes : +, * , ** Rien compris à ** applicable à l’objet de type complexe.

Page 9: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Type des données affectées aux variables. Types composés

Type chaine de caractères>>> a=‘toto’ >>>type(a) >>> <class ‘str’> Opérations sur les chaines de caractère : + (concaténation), 2*a (a + a), a[i] (extraction du caractère de rang i)

Type listes >>>L=[4,5,’toto’,3.14,True] >>>type(L) #renvoie <class ‘list’>Opérations sur les listes : Nombreuses citons + (concaténation), 2*L (L + L), L[i] (extraction du terme de rang i)

12/22/2012 Présentation de Python niveau débutant. 9

L), L[i] (extraction du terme de rang i) Autres types

>>>a=1,2,3 >>>type(a) #renvoie <class ‘tuple’>Conversion de types

>>>int(‘1’) # renvoie l’entier 1>>> ord(‘x’) # renvoie la valeur de l’octet ‘x’ en base 10.>>>chr(12) # renvoie si possible le caractère dont l’octet vaut 12 en base 10.

Exemple décevant ? >>> a=[[1,2],[3,4]] >>>2*a numpy va réparer cette limite de Python avec son type array.

Page 10: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Blocs d'instruction En python les limites des blocs d'instructions sont définies par l'indentation, la mise en page.

Instructions conditionnelles

Trois pour le prix d'une. La plus classique, la plus élémentaire, la plus générale.

if condition : if condition: if condition :

groupe d instructions groupe d instructions groupe d'instructions

else : elif : groupe d'instruction groupe d'instructions

elif :

groupe d'instructions

else : groupe d'instructions

Blocs d’instructions.

12/22/2012 Présentation de Python niveau débutant. 10

Blocs d'instruction de type boucles

Boucles conditionnelles Boucles de type compteur

while condition: for i in Indice

groupe d'instructions groupe d'instructions

Exercice : Calculer les termes de la suite de Fibonacci à l’aide d’une boucle et de la multi affectation.

Page 11: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Python POO ou pas POO

Python est un langage de programmation orienté objet. (abréviation poo).Difficile ici de comprendre l’intérêt de la chose, juste se familiariser avec les notations qui différent du classique opérateurs (fonctions) opèrent sur opérandes. Un exemple à la fois simple et puissant : >>> L=[5,1,4,2,8,3,12] # L est une instance (un objet) de la classe list.

12/22/2012 Présentation de Python niveau débutant. 11

>>> L=[5,1,4,2,8,3,12] # L est une instance (un objet) de la classe list.# J’aurais pu commencer par L=list()

>>> dir(L) # listing des attributs et méthodes de l’objet L.>>>L.sort() # on applique la méthode sort() sur l’objet L.

# Il faut remarquer ici que cette méthode modifie alors L. Ce point me semble assez différent de l’usage affectation d’un résultat.

Page 12: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Un Premier exercice Python.

Un code secret pas très secret.

Ecrire un message dans un fichier texte nommé message.txt. Ouvrir ce fichier texte avec Python : >>>fichier=open(message.txt,’r’) # ‘r’ read>>>message=fichier.read()

12/22/2012 Présentation de Python niveau débutant. 12

>>>message=fichier.read() # message est une chaîne de caractères contenant le message.>>>fichier.close() # ferme le fichier.

Modifier le message en inversant l’ordre d’écriture des caractères. Ecrire dans un fichier texte message_code.txt le message ainsi codé.Pour écrire dans un fichier texte c’est proche de la lecture :>>>fichier=open(message_code.txt,’w’) # ‘w’ write>>>fichier.write(‘ce que je veux’) # peut être appelé plusieurs fois écrit à la suite.>>>fichier.close()

Page 13: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Un premier exercice (Bis)D’après F Sincère et E Lucas.

Cet exemple est sans doute le plus difficile (flou) de l’exposé. L’objectif est proche du précédent mais le type « bytes » a un comportement un peu étrange.

« Lire le fichier lena_couleur.ppm » octets par octets.

« Inverser » les couleurs de Lena et fabriquer le fichier

12/22/2012 Présentation de Python niveau débutant. 13

« Inverser » les couleurs de Lena et fabriquer le fichier négatif de lena.

N’est il pas plus simple de calculer sin() ?de tracer x sin(x) ?

Lena la femme au chapeau : Image célèbre que l’on retrouve dans les exemples de traitement d’images.

Solution : exemple1_lena.py

Page 14: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Les fonctions. Récursivité

Comportement classique des paramètres d’entrée, variables locales ou globales. Récursivité sans problème.Exemple de vrais fonctions. Gestion des variables.

a=10def essai1(n): def essai2(n): def essai3(n):

a=2 n=a+n global a

12/22/2012 Présentation de Python niveau débutant. 14

a=2 n=a+n global an=a+n return n a=2return n n=a+n

return n# Après exécution # Bonne idée # Après exécution

a vaut 10 qu’il accepte ? a vaut 2

Exemple de récursivité : Ecrivons Fibonacci.

Page 15: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Numpy. Bienvenue aux nd-array>>> import numpy as np>>>dir(np) >>>dir(np.matrix)Le type array :>>> a=np.array([1,2,3,4,5,6,12]) # vecteur ligne>>> b=np.array([[1,2,3],[4,5,6]]) # matrice 2x3

12/22/2012 Présentation de Python niveau débutant. 15

>>> b=np.array([[1,2,3],[4,5,6]]) # matrice 2x3>>> c=np.array([[[.1,.2,.3],[.1,.2,.3],[.1,.22,.33]],[[.1,.12,.13],[.4,.5,.6],[1.,1.,1.]]])

#une image basique vraiment basique.Les fonctions : .ndim len, .shape, arange, linspace etc … Les calculs : +, *, .dot, .T etc ….Autres fonctions ou modules de numpy : Les fonctions mathématiques enfin ! Le module random.

Page 16: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Graphiques avec Matplotlib.pyplot

Pour entrer dans le sujet la fonction de base plot: >>> import matplotlib.pyplot as plt>>> dir(plt) >>> help(plt.plot)Enfin on peut traiter l’exemple fort simple du début: >>> x=np.linspace(0,2*np.pi,100)>>> plot(x,np.sin(x))

12/22/2012 Présentation de Python niveau débutant. 16

>>> plot(x,np.sin(x))>>>plt.show()# On voudra alors assez vite mieux contrôler les paramètres d’affichage.

Page 17: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Voici quelques options simples de tracé

12/22/2012 Présentation de Python niveau débutant. 17

Page 18: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Autres fonctions de Matplotlib.pyplot

Utilisées dans les exemples à suivre :plt.hist( ) trace l’histogramme d’une série de données regroupées par classe.plt.imread( ) importe les pixels d’une image dans un « 2x2x3 d »_array.plt.imshow() commande inverse de la précédente. plt.subplot( ) Partitionne la fenêtre graphique.

12/22/2012 Présentation de Python niveau débutant. 18

Non utilisées dans les exemples : Très nombreuses. Citons :plt.figure( )plt.axes()Les tracés 3d (projection 2d) il sait faire mais demande de mieux comprendre le POO.plt.gca( ) La fameuse commande Matlab (Scilab) gca « get current axes ». Pas facile d’usage.

Page 19: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

12/22/2012 Présentation de Python niveau débutant. 19

Page 20: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Une suite chaotique et le Figuier de Feingenbaum.

Soit la suite (un) définie par u0 = 0 et pour tout n entier :un+1 = 1 + λ(un

2 – 1)1er exercice le Figuier de Feingenbaum : Visualiser sur un même graphique le comportement de la suite suivant la valeur du paramètre λ. Portez en abscisse le paramètre λet faites le varier de λmin à λmax ( de 1.4 à 2 dans ma session) par pas assez petit. Pour λ fixé, prenez une valeur de départ u0 = 0 par exemple, et tracez le "paquet de points (λ,un)

12/22/2012 Présentation de Python niveau débutant. 20

Solution : exemple2_feingenbaum.py et exemple2_instabilite au premier terme.py

u0 = 0 par exemple, et tracez le "paquet de points (λ,un) pour n 500,600 (la aussi suivant capacités) ceci afin de "voir" le comportement de la suite. Remarquez par exemple que pour une valeur de λ telle que (un ) converge vers , cela affiche le point (λ , ).

2eme exercice : Prendre une valeur de λ. Tracer ensembles les 50 premières valeurs de la suite (un) pour u0 = 0 et u0 = 0.001. Observez la stabilité ou pas de l’erreur initiale.

Page 21: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Un Placement à la banque chaotique de prêtLes placements de Monsieur Alfred Log

Monsieur Alfred Log désire faire un placement . Il se renseigne auprès de la Société Chaotique de Banque (la

SCB) qui lui propose son tout nouveau placement d'épargne en ces termes :

• Votre apport initial est de (e – 1) Euros ( e représente le nombre e = e1= exp(1) ). L'apport est raisonnable

!!!

• Le premier mois vous êtes perdant, car on multiplie votre capital par 1, et l'on prélève 1 Euro pour frais de

gestion.

• Le deuxième mois c'est beaucoup mieux, on multiplie votre capital par 2 et on prélève toujours 1 Euro pour

frais de Gestion.

12/22/2012 Présentation de Python niveau débutant. 21

frais de Gestion.

• Le troisième mois on multiplie votre capital par 3 et on prélève toujours un Euro pour frais de Gestion.

• Ainsi de suite le neme

mois, on multiplie votre capital par n et on prélève 1 Euro toujours pour frais de

Gestion.

Monsieur Log septique décide de réserver sa réponse. Rentré chez lui, il décide de simuler ce placement.

Ayant quelques notions de mathématiques, il modélise sans grande difficulté la situation en considérant la

suite (un)n0 définie par u0 = e – 1

∀ n ∈ , un = n⋅un – 1– 1 ou de façon équivalente

u0 = e – 1

∀ n ∈ , un+1 = (n + 1)⋅un – 1.

Il se saisit alors d'une calculatrice pour connaître le capital obtenu au bout de 25 mois, soit à calculer u25.

Solution : exemple3_placementMLog.py

Page 22: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Il est 10h10……..Mais qu’elle heure est il ?

Tt = temps vrai 10h10. Je prendrais pour simplifier 10 les minutes, cela ne change rien au problème. T1 = temps de l’horloge 1 , suit N(10,σ1)T2 = temps de l’horloge 2, suit N(10,σ2)Ta = temps approximé par Ta = (1 – k)T1 + kT2 avec k minimisant σa

12/22/2012 Présentation de Python niveau débutant. 22

Solution : exemple4_quelle_heure.py

Page 23: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Travail mathématique : Calculer le kmin correspondant et σa en fonction de σ1 et σ2 .

Réponse : Sachant que les horloges sont indépendantes, σa2 = (1 – k)2 σ1

2 + k2 σ22 qui

est minimal pour kmin = (σ12 )/(σ1

2 + σ22).

On peut donc obtenir un σa plus petit que σ1 et σ2 , on améliore donc la précision des deux horloges.

Un exemple pour comprendre le travail Python. T1 donne 10h08à 2 minutes (σ1 = 2), T2 donne 10h14 à 5 minutes (σ2 = 5)On obtient alors kmin = 4/29 pour ce cas puis Ta = 10h08,83 à 1,86 minutes.

12/22/2012 Présentation de Python niveau débutant. 23

On obtient alors kmin = 4/29 pour ce cas puis Ta = 10h08,83 à 1,86 minutes.

Travail Python : Choisir deux valeurs pour σ1(= 2 par exemple) et σ2 = (5 par exemple). Puis faire 100 tirages aléatoires de T1 et de T2 grâce à la commande np.random.randn , puis le calcul des 100 Ta associés par Ta = (1 – kmin)T1 + kmin T2. Représentations graphiques pour T1, T2, Ta : Pour chacune : Sur un même graphique : Histogramme de la série statistique et la fonction de densité associée (attention mettre à l‘échelle l’histogramme et la fonction de densité). Les 3 graphiques de T1, T2, Ta dans une même fenêtre grâce à subplot.

Page 24: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Trajectoire du soleil le 15 mai à Pau

Adaptation à Python du TP Maple de F Pantigny

12/22/2012 Présentation de Python niveau débutant. 24

Trajectoire du soleil.pdf

Page 25: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Les options de tracé de cette figure

12/22/2012 Présentation de Python niveau débutant. 25

Page 26: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Le Retour de Lena

� La commande imread de matplotlib.pyplot permet de lire un fichier image .png et de renvoyer une matrice dont les éléments sont des [R,G,B]. On peut alors facilement faire des manipulations.des manipulations.

� La commande imshow(matrice) fait l’inverse et affiche l’image dans une fenêtre graphique.

� Ainsi il suffit d’une seule opération sur la matrice de Lena pour inverser ses couleurs. Laquelle ?

12/22/2012 Présentation de Python niveau débutant. 26

Page 27: Par un débutant pour des débutants - Créer un blog ...ghpython.h.g.f.unblog.fr/files/2013/01/presentation-de...Python rapide historique Références wikipedia : Guido Van Rossumné

Et après ….

Progresser en numpy et matplotlib.

Débuter en POO.

Passer à scipy : Analyse, FTT, traitement d’images.

12/22/2012 Présentation de Python niveau débutant. 27

traitement d’images.