• Aucun résultat trouvé

[PDF] Langage Python cours de base avec exemples | Formation informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Langage Python cours de base avec exemples | Formation informatique"

Copied!
78
0
0

Texte intégral

(1)

Développement rapide en Python

Stefano Facchini

(2)

Présentation du cours

10 séances

5 séances : CM + TD/TP

4 séances : CM + projet

1 séance : examen + discussion projet

(3)

Python

Première version 1989 par Guido van Rossum

Développé par la Python Software Foundation.

Open source.

Semi-interpreté (bytecode) multiplateformes.

Portable.

Orienté objet (mais aussi : impérative, fonctionnel)

Dynamique

(4)

4

Python

Portable

Linux

MacOS

Windows

Solaris

...

(5)

Python

Dynamique en deux sens :

« extensibilité » d'un programme au moment de

l'exécution (run-time)

typage dynamique (le type d'une expression est

déterminé au moment de l'exécution)

VS

(6)

6

Extensibilité

On peut « injecter » du nouveau code au moment

de l'exécution, et l'évaluer.

Cas extrême (et en général dangereux)

:

on pourrait demander à l'utilisateur d'entrer du code

arbitraire, et l'exécuter.

(7)

Typage dynamique

Python a un système de typage dynamique fort.

dynamique

= variables non déclarées, non typées

(les types sont inférés au moment de l'exécution)

fort

= absence de conversion implicite des types

(8)

8

Syntaxe

simple, claire, minimale, explicite, uniforme

préférences pour des mots (anglais) vs

(9)

Implémentations

Comme pour C on a plusieurs compilateurs,

de même pour Python on a plusieurs implémentations

CPython (implémentation de référence)

Jython

IronPython

PyPy

(10)

10

CPython

Implémentation de référence, par GvR et la PSF

Programmée en C

Interpréteur

La nouvelles caractéristiques du Python sont

normalement introduite dans CPython

(11)

Jython

Implémentation en Java

exécuté sur la Java Virtual Machine :

Python → Java bytecode

Interopérabilité avec modules Java

(12)

12

IronPython

Implémentation en C#.

Interopérabilité avec les librairies des

plateformes .NET et Mono

(13)

PyPy

Implémentation en (sous-ensemble de) Python

Très innovante, rapide, basée sur un compilateur

Just-In-Time (JIT)

www.pypy.org

(14)

14

PyPI

PyPI = Python Package Index

une collection de packages (>90000) pour Python

(15)

Python : 2.x vs 3.x

Deux version incompatibles :

version 2 :

● version courante : Python 2.7.14

● non développée, « bugfixing mode »

version 3 :

● version courante : Python 3.6.4 ● activement développée

(16)

16

Dans ce cours nous utiliserons principalement :

CPython

version 3

Deux mode d'usage :

mode interactif

script

(17)

Mode interactif

R

EAD

E

VALUATE

P

RINT

L

OOP

Boucle REPL

(18)

18

Mode interactif

$ python3

Python 3.5.2 (default, Sep 14 2016, 11:28:32) [GCC 6.2.1 20160901 (Red Hat 6.2.1-1)] on linux

Type "help", "copyright", "credits" or "license" for more information. >>> 5+5 10 >>> 3==3 True >>> print('Hello') Hello >>>

R

EAD

E

VALUATE

P

RINT

(19)

Mode interactif

Le résultat des instructions est immédiatement visible

(sans phase de compilation etc...)

(20)

20

Mode interactif

Prompt primaire :

>>>

Prompt secondaire (pour instructions sur plusieurs lignes) :

...

On peut couper une instruction longue avec un antislash

\

>>> 5 + 3 * (9

... + 7) / 2

29

>>>

>>> 5 + 3 +

\

... 2 + 1

11

>>>

(21)

Script

Script = fichier avec séquence d'instructions

Exemple 1 : fichier « test1.py »

print(5 + 5) print("Hello world") print("Ciao") % python3 test1.py 10 Hello world Ciao % test1.py

(22)

22

Script

Exemple 2 : fichier exécutable « test2 »

#!/usr/bin/env python3 print(5 + 5) print("Hello world") print("Ciao") test2 % chmod +x test2 % ./test2 10 Hello world Ciao %

(23)

Script

En

Python 2

, pour utiliser le caractères accentués, il

faut spécifier l'encodage Unicode (normalement utf-8):

#!/usr/bin/env python2 # coding: utf-8

-*-print u"Je peux utiliser des caractères accentués" test_unicode.py

% chmod +x test_unicode.py % ./test_unicode.py

Je peux utiliser des caractères accentués %

(24)

24 ●

python3 -c "print(5)"

exécuter une commande et sortir

python3 -i monscript.py

passer en mode interactif après exécution d'un

script

(25)

Commentaires

Les commentaires commencent par un dièse #, jusqu'à la fin

de la ligne.

>>> x = 5

#

Affectation

>>>

(26)

27

(27)

Variables

Une variable est créée et définie par affectation. Une variable est effacée par l'opérateur del.

>>> x = 30 >>> x 30 >>> x = 'hello' >>>x 'hello' >>> del x >>> x

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

(28)

29

Variables

Nom des variable (et tous les identificateur) : lettres

minuscules (a à z), lettres majuscules (A à Z), chiffres (0 à

9), caractère souligné (_)

En

Python 3

: certains caractères Unicode sont permis

(caractères accentués, alphabets grec et arabe, etc...)

Attention

:

un nom de variable ne doit pas débuter par un chiffre

python est sensible à la casse : foo ≠ Foo

(29)

Objets et variables

Variable = étiquette rattachée à un objet.

a = 1

vs C, C++, Java... variable = boite

int a;

a = 1;

(30)

31

Objets et variables

int a;

a = 1;

a = 2;

int b;

b = a;

(31)

Objets et variables

a = 1

a = 2

(32)

33

Types

Le système des types en Python est très riche. Types de haut niveau. Les principaux :

– Booléens (bool)

– Numériques (int, float, complex) – Chaînes (str, bytes)

– Séquences (list, tuple, ...)

– Dictionnaires, a.k.a. « Tableaux associatifs » (dict) – Ensembles (set)

Le type d'un objet est donné par la fonctionne type. Notion de mutabilité. It ér ab le s

(33)

Booléens

Deux constantes, True et False

(attention aux majuscules !)

>>> x = True

>>> type(True)

<class 'bool'>

>>> type(x)

<class 'bool'>

>>> 3 > 5

False

(34)

35

Types numériques

Entiers (int), avec précision arbitraire

Floating point (float), équivalent de « double » en C

Complexes (complex)

En

Python 2

:

long (= int du Python 3)

int (précision finie)

(35)

Types numériques

>>> 10 # int 10

>>> 0.6 # float 0.6

>>> 3.5e-25 # float, notation scientifique 3.5e-25

>>> 3 + 5j # complex (3+5j)

>>> 1j * 1j # Attention, 1j et non pas j (-1+0j)

(36)

37

Types numériques

Les opérations principales :

+ addition - soustraction * multiplication / division ** puissance // division entière % modulo

(37)

Types numériques

Le nom d'un type est souvent aussi une

fonction de conversion :

>>> x = int(6.66)

>>> x

6

>>> x = float(2)

>>> x

2.0

(38)

39

Détour : les attributs

Python est orienté objet : tout est un objet, même les nombres.

Un objet peut avoir des attributs = des donnés qui appartiennent à l'objet. Les attributs sont accessibles avec la notation :

nom_objet.nom_attribut >>> x = 3.1 + 5.2j

>>> type(x)

<class 'complex'>

>>> x.imag # Attribut 'imag' de x 5.2

>>> type(x.imag) <class 'float'>

(39)

Chaînes

Les chaînes (str) sont un type immuable.

Chaîne = séquence de caractères.

>>> s1 = 'spam' >>> s2 = "foo" >>> s3 = '''longue phrase ... sur plusieurs ... lignes''' >>> s3

'longue phrase\nsur plusieurs\nlignes' >>> s4 = """une autre

(40)

41

Chaînes

Les caractères d'échappement : pour introduire des

caractères spéciaux

.

>>> print('J

\'

ai faim')

J'ai faim

Autres séquences : \t pour la tabulation, \n pour newline,

etc...

>>> print('

\t

Septembre

\n\t

Octobre')

Septembre

(41)

Chaînes

Les chaînes aussi ont des attributs. Certains sont des fonctions : >>> s = 'spam' >>> s.upper() 'SPAM' >>> s.capitalize() 'Spam' >>> s.find('a') 2

(42)

43

Chaînes formatées

Équivalent de la fonction C printf. On a une chaîne de contrôle à formater, où certaines balises sont remplacées par des valeurs. Ancienne méthode :

Les séquences sont introduites par le caractère % Les arguments suivent l'opérateur « modulo » % : >>> "Hello %s% "Alice"

'Hello Alice'

>>> "%s%i ans" % ("Luc", 20) 'Luc a 20 ans'

>>> "La valeur de PI est %.2f% 3.14159 'La valeur de PI est 3.14'

(43)

Chaînes formatées

Nouvelle méthode :

Le séquence sont du genre {n}, avec n un entier. Les arguments apparaissent dans la fonction format :

>>> "{0} a {1} ans".format("Luc", 20) 'Luc a 20 ans'

>>> print("{0} {1} {0} {1} {0}\n{2}".format('une rose', 'est', 'Gertrude Stein'))

une rose est une rose est une rose Gertrude Stein

Beaucoup d'options disponibles (décimales, alignement, ...), voir https://docs.python.org/3/library/string.html

(44)

46

Listes

Collection (mutable) d'éléments de type arbitraire, construite avec des crochets et des virgules:

>>> liste = ['bleu', 'rouge', 'vert', 'jaune']

Accès aux éléments par indice : >>> liste[0] 'bleu' >>> liste[2] 'vert' >>> liste[-1] 'jaune' >>> liste[-2] 'vert'

(45)

Listes

La même syntaxe permet de modifier les

éléments d'une liste :

>>> a = [1, 2, 3]

>>> a[0] = 99

>>> a

(46)

48

Listes

Pour l'extraction d'une sous-liste on utilise la syntaxe liste[début:fin], qui génère une nouvelle liste avec les éléments compris entre les indices début et fin-1 :

>>> liste = ['bleu', 'rouge', 'vert', 'jaune'] >>> liste[0:2]

['bleu', 'rouge']

On peut omettre les indices : >>> liste[2:]

['vert', 'jaune'] >>> liste[:2]

['bleu', 'rouge']

>>> liste[:] # idiome courante pour copier une liste ['bleu', 'rouge', 'vert', 'jaune']

(47)

Listes

Attention

à la différence :

>>> liste = [10, 20, 30, 40, 50]

>>> liste[1] # un élément

20

>>> liste[1:2] # une liste

[20]

(48)

50

Listes

Concaténation avec l'opérateur « + » :

>>> a = ['lundi', 'mardi']

>>> b = ['mercredi', 'jeudi']

>>> a

+

b

(49)

Listes

Opérations qui modifient la liste :

>>> a = [1, 2, 3, 4, 5, 6, 7]

>>> a.append(8) # ajoute un élément au fond >>> a

[1, 2, 3, 4, 5, 6, 7, 8]

>>> # renvoie le dernier élément et l'efface de la liste >>> a.pop()

8

>>> a

(50)

52

Listes

La fonction list.insert(pos, element) ajoute un élément à la position pos :

>>> a.insert(3, 99) >>> a

[1, 2, 3, 99, 4, 5, 6, 7]

Autres fonctions : reverse, sort, extend ... >>> a.reverse(); a [7, 6, 5, 4, 99, 3, 2, 1] >>> a.sort(); a [1, 2, 3, 4, 5, 6, 7, 99] >>> a.extend([-1, -2, -3]); a [1, 2, 3, 4, 5, 6, 7, 99, -1, -2, -3]

(51)

Listes

Attention !

L'affectation ne copie pas une liste (étiquettes et objets) :

>>> x = [1, 2, 3]

>>> y = x

>>> x[0] = 99

>>> y

(52)

54

Tuples

Les tuples sont des listes immuables, définis par des

parenthèses et virgules :

>>> t =

(

20

,

30

,

40

)

>>> t = () # Tuple vide

(53)

Tuples

L'accès aux éléments et l'extraction de sous-tuples suit la même syntaxe que les listes :

>>> t = (20, 30, 40) >>> t[0]

20

Mais :

>>> t[0] = 99

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: 'tuple' object does not support item assignment

(54)

56

Tuples

Extraction d'un sous-tuple :

>>> t = (20, 30, 40, 50, 60)

>>> t[1:3]

(55)

Listes et tuples

Conversion entre listes et tuples : >>> t = (20, 30, 40, 50) >>> liste = list(t) >>> liste [20, 30, 40, 50] >>> t2 = tuple(liste) >>> t2 (20, 30, 40, 50)

(56)

58

Structures de contrôle

(57)

Tests

Les instructions conditionnelles sont introduites par les mots réservés

if...else :

x = 5

# Il n'y a pas de parenthèses autour de la condition

if x == 5: # Notez le « : »

print('Vrai') print(x)

else: # Notez le « : »

(58)

60

Tests à plusieurs cas

Pour les tests à plusieurs cas, on utilise if...elif...else

if x < 0:

print('Nombre negatif')

elif x == 0:

print('Zero')

elif x % 2 == 0:

print('Nombre positif pair')

else:

(59)

Comparaisons

Les principaux opérateurs de comparaisons sont :

< inférieur à <= inférieur ou égal à > supérieur à >= supérieur ou égal à == égal à != différent de in appartenance

(60)

62

Comparaisons

Les connecteurs logiques sont des mots : and, or, not Pas de symboles ! && || !

>>> 0 == 0 and 3 < 5 True >>> -1 > 0 or 'foo' == 'foo' True >>> not True False >>> not 1 in [1, 2, 3] False

>>> 1 not in [1, 2, 3] # plus lisible False

(61)

Bloc d'instructions

Les blocs sont définis par l'indentation, qui fait donc partie

de la syntaxe de Python.

Dans chaque bloc, l'indentation est arbitraire mais

constante.

# Valide if x == 5: print 'vrai' print x # Erreur if x == 5: print 'Vrai' print x

(62)

64

Bloc d'instructions

# Valide, mais pas conseillé !

if x == 5: print('vrai') print(x) else: print('faux') print('blah')

Normalement, 4 espaces

(

https://www.python.org/dev/peps/pep-0008/#indentation

)

(63)

Bloc d'instructions

Blocs imbriqués :

# Un point a coordonnées (x,y) print 'Le point est dans :'

if y > 0:

if x > 0:

print('le quadrant I')

print('le demi-plan supérieur')

elif y < 0:

if x < 0:

print('le quadrant III')

(64)

66

(65)

Boucles

En Python on a la boucle for, mais il est un peu différent de ce qu'on trouve normalement ailleurs.

Avec for on peut itérer sur les éléments d'un objet itérable (e.g. list, tuple, dict, ...) = un objet qui peut lister ses éléments l'un après l'autre .

people = ['Françoise', 'Marc', 'Elodie', 'Jean']

for person in people:

(66)

68

Boucles

Pour reproduire le for traditionnel on peut itérer sur une liste d'entiers :

# Print the squares 0, 1, 4, ... 81

for x in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:

print(x**2)

Heureusement, il y a une fonction range(n) qui génère une liste de nombres entiers entre 0 et n-1:

for x in range(10):

(67)

Boucles

La boucle while :

x = 0

while x < 10:

print(x)

x = x + 1

(68)

70

Boucles

Pour passer à la prochaine itérations : continue

for n in range(10):

if n % 2 == 0:

continue

(69)

Boucles

Pour sortir d'une boucle : break...else n = 21 for x in range(2, n): if n % x == 0: print('{} = {} * {}'.format(n, x, n/x)) break else:

print('{} est un nombre premier'.format(n)) print('FIN')

(70)

72

pass

L'instruction pass ne fait strictement rien.

Elle est utilisée quand la syntaxe requiert une instruction, mais vous ne voulez rien exécuter (ou ne savez pas encore que faire).

pass est l'équivalent pythonique d'un bloc vide { } en C

for x in range(10): pass

if x == 3: pass

(71)

Interaction avec l'utilisateur

On peut utiliser la fonction input pour demander à

l'utilisateur d'entrer une chaîne :

>>> s = input()

bonjour

>>> s

(72)

74

Interaction avec l'utilisateur

La fonction input accepte un argument facultatif, utilisé

comme « prompt » :

>>> s = input('Entrez un mot : ')

Entrez un mot : bonjour

>>> s

(73)
(74)

76

Fonctions

On peut définir des nouvelles fonctions par le mot-clé def:

def hello_world():

print('Hello, world')

(75)

Fonctions

Les fonctions acceptent des arguments :

def hello(name):

print('Salut {}, bienvenue'.format(name)) hello('Jean')

def affiche_somme(x, y):

print(x + y)

(76)

78

Fonctions

On peut renvoyer des valeur avec return :

def calcul_produit(x, y):

return x * y

(77)

Fonctions

def affiche_introduction():

print('Bienvenu')

print('Le programme calcule le carré d\'un nombre entier')

def obtiens_un_nombre():

x = int(input('Entrez un nombre entier : ')) return x

def affiche_carre(x):

print(x**2)

affiche_introduction() n = obtiens_un_nombre()

(78)

80

Fonctions

Une fonction qui ne « return » pas, renvoie quand-même quelque chose !

L'objet None (de type NoneType). Source fréquente de problèmes : def f(x):

x += 1

# On oublie de renvoyer le résultat ... # return x

Références

Documents relatifs

logue : quelques-unes de ces collections étaient tenues sans aucun soin, en sorte que l'on ne saurait trop préciser tout ce qui a dû s'v trouver et tout ce qui a pu être aliéné d'une

[r]

L’objectif voulu par cette étude est l’exploitation des matériaux locaux principalement le sable dans la confection d’un nouveau béton dit le béton de sable

[r]

La d´ erivabilit´ e sur R de l’argument sinus hyperbolique implique alors par produit puis composition celle de

[r]

[r]

[r]