Introduction à Python - e-campus

publicité
Notebook
18/12/2014 12:14
In [24]: from __future__ import print_function
Introduction à Python
Propos préliminaires
Pourquoi Python
Python est simple et rapide à comprendre, on peut ensuite se perfectionner pendant longtemps
Il fonctionne sous différents OS (Windows, Linux, OS X, Android, iOS, etc)
De nombreuses bibliothèques couvrant des domaines variés, du réseau aux interfaces graphiques, des méthématiques symboliques au traitement du
signal (batteries included)
C'est un langage qui est très facile à lire (write once, read often)
Pour approfondir vos connaissances en Python, plusieurs livres sont disponibles à la bibliothèque. Il y a également un tutoriel très bien fait de Guido van
Rossum, le créateur du langage.
Installer Python
Il y a deux branches de Python, la version 2 et la version 3. Cette dichotomie vient du fait qu'un certain nombre d'améliorations nécessitaient de casser la rétrocompatibilité : lancer un code valide en Python 2.X avec un interpréteur en Python 3.Y peut générer des erreurs. Il existe cependant beaucoup d'outils pour
convertir automatiquement des codes de Python 2 en Python 3. La transition entre les versions 2 et 3 est prévue sur 5 ans, pour finir en 2016. Aujourd'hui (fin
2014), il est commence à devenir plus intéressant de travailler en Python 3.
Pour installer Python sur votre ordinateur, il existe plusieurs moyens. Je vous recommande d'installer la suite Canopy d'Entought
(https://store.enthought.com/#canopy-academic), qui est gratuite pour les universitaires et payante pour les entreprises. Pour bénéficier de la version
académique, il faut vous enregistrer (https://store.enthought.com/accounts/login/?next=/licenses/academic/request/) avec votre adresse mail officielle
ens.uvsq.fr.
Sinon, il existe aussi les alternatives suivantes:
Linux: il suffit généralement d'utiliser les paquets Python de votre distribution
Mac OS: il est possible d'utiliser MacPorts (http://www.macports.org/) ou homebrew (http://www.brew.sh/)
Windows: la distribution Anaconda (http://www.continuum.io/downloads) regroupe tout ce qu'il vous faut.
Python comme calculatrice
Une fois Python lancé vous avez accès à un interpréteur de commande. Je l'utilise régulièrement comme calculatrice.
Les nombres
In [2]: 2+2
Out[2]: 4
In [1]: (50-5*6)/4 # un commentaire
Out[1]: 5
In [4]: # Ceci est um commentaire
La division de deux entiers retourne l'entier immédiatement inférieur
In [2]: 7/2 # c'est un commentaire sur la même ligne que
le code
Out[2]: 3
In [6]: 7/-2
Out[6]: -4
http://localhost:8888/nbconvert/html/coursIntroPython/1-ApprendrePython-Introduction.ipynb?download=false
Page 1 sur 8
Notebook
18/12/2014 12:14
Les nombres à virgules flottantes sont pris en compte. Lorsque des entiers et des flottants sont mélangés dans un calcul, les opérateurs travaillent toujours
avec la plus grande précision possible, donc en flottants.
In [7]: 553 * 4 / 1.5
Out[7]: 1474.6666666666667
In [6]: 7 / 2.
Out[6]: 3.5
Les nombres complexes sont également faciles à utiliser en Python.
In [9]: 1 + 1j
Out[9]: (1+1j)
In [10]: 1j + 1J
Out[10]: 2j
In [11]: 1j * 1j
Out[11]: (-1+0j)
On peut utiliser le signe = pour affecter une valeur à une variable. La valeur de la variable affichée n'est pas affichée.
In [8]: largeur = 20
hauteur = 5*9
largeur * hauteur
Out[8]: 900
Il est possible d'affecter une valeur à plusieurs variables simultanément :
In [6]: x = 0; y = 0; z = 0
x = y = z = 0 # Mettre à zéro x, y et z
En mode interactif (utilisé ici comme calculatrice), la dernière valeur affichée est affectée à la variable _, ce qui peut être pratique pour continuer les calculs
In [11]: tva = 19.6 / 100
prix = 100.95
prix * tva
Out[11]: 19.7862
In [12]: prix + _
Out[12]: 120.7362
In [13]: round (_, 2)
Out[13]: 120.74
Chaînes de caractères
Python propose de manipuler les chaînes de caractères avec beaucoup de facilité. Ces chaînes peuvent être exprimées de différentes façons, elles peuvent
être incluses entre simples quotes (apostrophes) et doubles quotes (guillemets)
In [17]: 'La cigale et la Fourmi'
Out[17]: 'La cigale et la Fourmi'
In [15]: 'n\'est-ce pas'
Out[15]: "n'est-ce pas"
http://localhost:8888/nbconvert/html/coursIntroPython/1-ApprendrePython-Introduction.ipynb?download=false
Page 2 sur 8
Notebook
18/12/2014 12:14
In [19]: "n'est-ce pas"
Out[19]: "n'est-ce pas"
Attention aux caractères accentués, il est posible qu'ils soient mal interprétés si vous passez d'un OS à l'autre (Windows à Linux par exemple). Il n'est pas
permis d'utiliser des accents pour nommer des variables en Python.
Il est possible de définir des chaînes de caractères qui s'étendent sur plusieurs lignes.
In [20]: fable = "Le corbeau et le Renard\n\
Maître Corbeau, sur un arbre perché,\n
print (fable)
Tenait dans son bec un fromage"
Le corbeau et le Renard
Maître Corbeau, sur un arbre perché,
Tenait dans son bec un fromage
Les retours à la ligne sont indiqués par des \n. Le \ qui suit indique qu'il ne faut pas tenir compte le retour à la ligne du texte. Vous noterez que les blancs en
début de ligne sont significatifs.
Une chaîne de caractères peut être définie comme chaîne raw (brute), dans ce cas les \n ne sont pas interprétés mais les \ avec le retour chariot permettent
tout de même de revenir à la ligne. Il suffit pour cela de rajouter un r avant d'ouvrir les guillemets (" ou ') de la chaîne.
In [21]: fable
Une
Qui
print
= r"La Grenouille qui veut se faire aussi grosse que le Bœuf\n \
Grenouille vit un Bœuf,\n \
lui sembla de belle taille"
(fable)
La Grenouille qui veut se faire aussi grosse que le Bœuf\n
de belle taille
Une Grenouille vit un Bœuf,\n
Qui lui sembla
Les chaînes peuvent également être entourées de triples guillemets (""" ou '''). Dans ce cas, un retour à la ligne est considéré comme un retour à la ligne. Il
n'est plus nécessaire de mettre \n ou \\.
In [19]: print ("""
Usage: trucmuche [OPTIONS]
-h
-b
""")
Usage: trucmuche [OPTIONS]
-h
-b
affiche cette page d'aide
active l'option bidule
affiche cette page d'aide
active l'option bidule
Les chaînes peuvent être concaténée, ou accolées, avec l'opérateur + et multipliée avec l'opérateur *.
In [17]: mot = 'mac' + 'hin'
mot
Out[17]: 'machin'
In [18]: partie1 = 'mac'
partie2 = 'hin'
mot = partie1 + partie2
mot
Out[18]: 'machin'
In [19]: print ('<' + 5*mot + '>')
<machinmachinmachinmachinmachin>
Deux chaînes cote à cote sont automatiquement accolées : nous aurions pu écrire
In [23]: 'mac' 'hin'
Out[23]: 'machin'
http://localhost:8888/nbconvert/html/coursIntroPython/1-ApprendrePython-Introduction.ipynb?download=false
Page 3 sur 8
Notebook
18/12/2014 12:14
Les chaînes de caractères peuvent être décomposées, ou indexées. Dans ce cas, comme en C, le premier caractère est à la position 0. Le type caractère
n'existe pas, un caractère est considéré comme une chaîne de caractère de taille 1. Il est possible de découper des sous-chaînes de caractères en utilisant la
notation de découpage (ou slice) avec les deux points (:).
In [25]: mot[0]
Out[25]: 'm'
In [29]: mot[0:2]
Out[29]: 'ma'
In [30]: mot[2:4]
Out[30]: 'ch'
Il n'est pas possible de modifier les chaînes de caractères, à la différence du C. Vous obtiendrez une erreur si vous essayez de modifier un caractère de la
chaîne:
In [20]: mot[0] = 't'
--------------------------------------------------------------------------TypeError
Traceback (most recent call last)
<ipython-input-20-a298fccab792> in <module>()
----> 1 mot[0] = 't'
TypeError: 'str' object does not support item assignment
In [22]: mot[2:6] = 'rins'
--------------------------------------------------------------------------TypeError
Traceback (most recent call last)
<ipython-input-22-ea6fefd1f66b> in <module>()
----> 1 mot[2:6] = 'rins'
TypeError: 'str' object does not support item assignment
Mais il est très facile de créer une nouvelle chaîne avec le contenu que l'on souhaite :
In [38]: 't' + mot[1:6]
Out[38]: 'tachin'
In [39]: mot[0:2] + 'rins'
Out[39]: 'marins'
Les indices de découpages ont des valeurs par défaut utile. Le premier indice non défini prend la valeur par défaut 0, le deuxième indice prend la taille de la
chaîne que l'on est en train de découper.
In [34]: mot[:2] # les deux premiers caractères
Out[34]: 'ma'
In [35]: mot[2:] # tout sauf les deux premiers caractères
Out[35]: 'chin'
Il est à noter que s[:i] + s[i:] est égal à s
In [36]: print (mot[:2] + mot[2:])
print (mot[:3] + mot[3:])
machin
machin
Les indices erronés sont générés de façon élégante : un indice trop grand est remplacé par la taille de la chaîne et un indice de fin plus grand qu'un indice de
début génère une chaîne vide
http://localhost:8888/nbconvert/html/coursIntroPython/1-ApprendrePython-Introduction.ipynb?download=false
Page 4 sur 8
Notebook
18/12/2014 12:14
In [37]: mot[1:100]
Out[37]: 'achin'
In [38]: mot[10:]
Out[38]: ''
In [40]: mot[2:1]
Out[40]: ''
Les indices peuvent être négatifs pour compter à partir de la droite :
In [40]: mot[-1] # le dernier caractère
Out[40]: 'n'
In [41]: mot[-2] # l'avant dernier caractère
Out[41]: 'i'
In [42]: mot[-2:] # les deux derniers caractères
Out[42]: 'in'
In [43]: mot[:-2] # tout sauf les deux derniers caractères
Out[43]: 'mach'
Vous noterez que -0 est équivalent à 0:
In [44]: mot[-0] # premier caractère
Out[44]: 'm'
On peut donner des valeurs négatives hors limites pour le découpage. Cependant, pour l'accès direct, cela génère des erreurs
In [45]: mot[-100:]
Out[45]: 'machin'
In [25]: mot[-10]
--------------------------------------------------------------------------IndexError
Traceback (most recent call last)
<ipython-input-25-4feaf8131d45> in <module>()
----> 1 mot[-10]
IndexError: string index out of range
Pour bien se rappeler le découpage, une bonne méthode est de penser à des indices qui pointent entre les caractères, par exemple
-+---+---+---+---+---+---+
-4 -3 -2 -1
| m | a | c | h | i | n |
+---+---+---+---+---+---+
0
1
2
3
4
5
6 -6
-5
Ainsi le découpage entre i et j est celui qui contient tous les caractères compris entre i et j.
La fonction len() retourne la longueur d'une chaîne:
In [47]: s = 'supercalifragilisticexpialidocious'
len (s)
Out[47]: 34
Il est possible d'utiliser des chaînes de caractères en Unicode, pour avoir accès aux caractères non-ASCII, comme é, è, ê, etc. Pour cela, il suffit de mettre un u
devant la chaîne de caractères.
In [48]: s_unicode = u"Épautre français"
print (s_unicode)
Épautre français
http://localhost:8888/nbconvert/html/coursIntroPython/1-ApprendrePython-Introduction.ipynb?download=false
Page 5 sur 8
Notebook
18/12/2014 12:14
Informations complémentaire
Vous pouvez consulter les pages suivantes pour approfondir les traitements sur les chaînes de caractères:
https://docs.python.org/3/library/string.html qui explique toutes les méthodes relatives aux chaînes de caractères, à leur transformation, et aux
recherches dans les chaînes
http://docs.python.org/lib/typesseq-strings.html qui indique comment mettre en forme les chaînes, avec l'opérateur %, un peu à la façon du C
http://docs.python.org/lib/typesseq.html qui décrit les types séquences et leur méthodes, que nous verrons plus tard.
Listes
Python connaît un grand nombre de types de données composites, utilisées pour regrouper un ensemble de valeurs. La plus riche en possibilités est la liste,
qui peut être écrite comme une liste de valeurs (éléments) entre crochets et séparés par des virgules. Les éléments d’une liste n’ont pas nécessairement le
même type.
In [3]: ma_liste = ['reseaux', 'neuronaux', 100, 1234]
ma_liste
Out[3]: ['reseaux', 'neuronaux', 100, 1234]
Comme les indices des chaînes, les indices des listes commencent à 0, et les listes peuvent être découpées, concaténées, et ainsi de suite :
In [4]: ma_liste[0]
Out[4]: 'reseaux'
In [5]: ma_liste[3]
Out[5]: 1234
In [6]: ma_liste[-2]
Out[6]: 100
In [7]: ma_liste[1:-1]
Out[7]: ['neuronaux', 100]
In [8]: ma_liste[:2] + ['biomimetiques', 2*2]
Out[8]: ['reseaux', 'neuronaux', 'biomimetiques', 4]
In [9]: 2*ma_liste[:3] + ['Fin']
Out[9]: ['reseaux', 'neuronaux', 100, 'reseaux', 'neuronaux', 100, 'Fin']
A la différence des chaînes, qui sont non-modifiables, il est possible de changer les éléments individuels d’une liste :
In [10]: ma_liste
Out[10]: ['reseaux', 'neuronaux', 100, 1234]
In [11]: ma_liste[2] = ma_liste[2]+23
In [12]: ma_liste
Out[12]: ['reseaux', 'neuronaux', 123, 1234]
In [14]: # Remplacer certains éléments
ma_liste[:2] = [1, 12]
ma_liste
Out[14]: [1, 12, 123, 1234]
In [15]: # Pour en enlever
ma_liste[0:2] = []
ma_liste
Out[15]: [123, 1234]
http://localhost:8888/nbconvert/html/coursIntroPython/1-ApprendrePython-Introduction.ipynb?download=false
Page 6 sur 8
Notebook
18/12/2014 12:14
In [19]: # pour en ajouter
ma_liste[1:1] = ['abc', 'def']
ma_liste
Out[19]: [123, 'abc', 'def', 1234]
In [20]: ma_liste[:0] = ma_liste
ma_liste
# Insère une copie de soi-même au début
Out[20]: [123, 'abc', 'def', 1234, 123, 'abc', 'def', 1234]
La fonction intégrée len( ) s’applique aussi aux listes :
In [21]: len(ma_liste)
Out[21]: 8
Il est possible d’emboîter des listes (créer des listes contenant d’autres listes), par exemple :
In [16]: q = [2, 3]
p = [1, q, 4]
len(p)
Out[16]: 3
In [18]: p[1]
Out[18]: [2, 3]
In [19]: p[1][0]
Out[19]: 2
In [21]: len(p[1])
Out[21]: 2
Notez bien que p[1] et q permette d'accéder à la même chose, au même objet.
Premiers pas vers la programmation
Bien sûr, nous pouvons utiliser Python pour des tâches plus compliquées que d’ajouter deux et deux. Par exemple, nous pouvons écrire une sous-séquence de
la suite de Fibonacci de la façon suivante :
In [22]: # Suite de Fibonacci
# La somme de deux éléments définit le suivant
a, b = 0, 1
while b < 100 :
print (b)
a, b = b, a+b
1
1
2
3
5
8
13
21
34
55
89
http://localhost:8888/nbconvert/html/coursIntroPython/1-ApprendrePython-Introduction.ipynb?download=false
Page 7 sur 8
Notebook
18/12/2014 12:14
Cet exemple introduit plusieurs fonctionnalités nouvelles.
La première ligne contient une affectation multiple : lesvariables a et b prennent simultanément les nouvelles valeurs 0 et 1. Sur la dernière ligne
l’affectation multiple est utilisée à nouveau, montrant que les expressions en partie droite sont d’abord toutes évaluées avant qu’aucune affectation ne
se fasse.
La boucle while s’exécute tant que la condition (ici : b < 10) reste vraie . En Python, comme en C, toute valeur entière différente de zéro est vraie ;
zéro est faux. La condition pourrait aussi être une chaîne ou une valeur de type liste, en fait n’importe quelle séquence ; n’importe quoi avec une
longueur différente de zéro est vrai, les séquences vides correspondent à faux. Le test utilisé dans l’exemple est une simple comparaison. Les
opérateurs de comparaison standard sont écrits de la même façon qu’en C : <, >, ==, <=, >= et !=.
Le corps de la boucle est indenté : l’indentation est le moyen par lequel Python regroupe les instructions. Python ne fournit pas (encore) une fonction
d’édition de ligne intelligente, donc vous devez insérer une tabulation ou un espace pour chaque ligne indentée. En pratique vous préparerez les
saisies plus compliquées avec un éditeur de texte ; la plupart des éditeurs de texte ont une fonction d’auto-indentation. Lorsqu’une instruction
composée est entrée en mode interactif, elle doit être suivie d’une ligne vide pour indiquer qu’elle est terminée (car l’interpréteur ne peut pas deviner si
vous avez tapé la dernière ligne).
L’instruction print écrit la valeur de la ou des expressions qui lui sont données. Elle diffère de la simple écriture de l’expression (comme tout-à-l’heure
dans les exemples de la calculatrice) dans la mesure où elle accepte plusieurs expressions et chaînes. Les chaînes sont imprimées sans apostrophes,
et un espace est inséré entre les éléments, ce qui vous permet de les afficher dans un format plus sympathique, comme ceci :
In [25]: i = 256*256
print ('La valeur de i est', i)
La valeur de i est 65536
Il est possible de supprimer le saut de ligne de print en changeant le caractère de fin de ligne:
In [39]: a, b = 0, 1
while b < 1000:
print (b, end=' ')
a, b = b, a+b
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
Ce notebook est une adaptation de la traduction française, dirigée par Olivier Berger et mise à jour par Henri Garreta, du tutoriel Python édité par Guido van
Rossum et Fred L. Drake.
http://localhost:8888/nbconvert/html/coursIntroPython/1-ApprendrePython-Introduction.ipynb?download=false
Page 8 sur 8
Téléchargement