Python EEIN Najoui 21-22

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 37

12/11/2021

Université Mohammed V de Rabat


Ecole Nationale Supérieure d’Arts et Métiers
Département Génie Electrique

Initiation a la programmation
Python

Pr. M. NAJOUI

m.najoui@um5s.net.ma

M. NAJOUI - ENSAM - Rabat 1

Introduction

Pourquoi ce cours ?

La tendance du marché de l’emploi.


L’esprit d’automatisation est un must-have pour les ingénieurs.

“Python has become an important


programming language not just to
embedded systems but to general
application programmers as well”.
Jacob Beningo
Embedded SW consultant with over 15 years of experience
in microcontroller based real-time embedded systems.

M. NAJOUI - ENSAM - Rabat 2

1
12/11/2021

Introduction

Python ? Caractéristiques?

Développé en 1989 par Guido van Rossum (Pays-Bas, version 1 en 1991).


Open-source, gratuit, a utiliser dans des projets commerciaux sans pb.
Portable, Dynamique (haut niveau).
Simple a apprendre et optimal en terme de nombre de LOC.
Pas de pointeurs explicite.
Multi-threadé
Orienté objet
Extensible, continue à évoluer.
Grande variété de services proposés dans des bibliothèques standard.
Langage de choix pour le traitement des fichiers XML, Excel…
M. NAJOUI - ENSAM - Rabat 3

Introduction

Comment exécuter mon code source ?


Il existe 2 techniques principales :
Interprétation :

Compilation :

M. NAJOUI - ENSAM - Rabat 4

2
12/11/2021

Introduction

Editeurs/Interpreteurs de code Python (IDE) :


PyCharm

Visual Studio Code

Sublime Text

Atom

Eclipse

…..
M. NAJOUI - ENSAM - Rabat 5

Installation et Configuration

Installation de Python, Eclipse et JRE :


Télécharger Python : https://www.python.org/downloads/
Installer Python 3.6 dans votre machine.
Télécharger l’EDI Eclipse : Vaut mieux d’utiliser la version neon 4.6
(https://www.eclipse.org/downloads/packages/)
Placer Eclipse dans un répertoire (par exple « c:/python_IDE ») et
décompresser le.
Télécharger et installer le JRE (Java Runtime Environment)
Suivre les étapes suivantes afin de configurer python sur Eclipse :

M. NAJOUI - ENSAM - Rabat 6

3
12/11/2021

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».

M. NAJOUI - ENSAM - Rabat 7

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».
Cliquer sur « Next ».

M. NAJOUI - ENSAM - Rabat 8

4
12/11/2021

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».
Cliquer sur « Next ».
Encore « Next »

M. NAJOUI - ENSAM - Rabat 9

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».
Cliquer sur « Next ».
Encore « Next »
Cocher « I accept… »
Cliquer sur « Finish »

NB: Vous devriez avoir une connection


internet afin de reussir cette configuration.

M. NAJOUI - ENSAM - Rabat 10

5
12/11/2021

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».
Cliquer sur « Next ».
Encore « Next »
Cocher « I accept… »
Cliquer sur « Finish »
Téléchargement…
Cliquer sur « Yes »

M. NAJOUI - ENSAM - Rabat 11

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help → Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».
Cliquer sur « Next ».
Encore « Next »
Cocher « I accept… »
Cliquer sur « Finish »
Téléchargement…
Cliquer sur « Yes »
Relancer eclipse.
Cliquer sur Window → Preferences.
PyDev → Interpreters → Python Inter
Cliquer sur « Browse for python… »

M. NAJOUI - ENSAM - Rabat 12

6
12/11/2021

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help → Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».
Cliquer sur « Next ».
Encore « Next »
Cocher « I accept… »
Cliquer sur « Finish »
Téléchargement…
Cliquer sur « Yes »
Apres relancement d’eclipse.
Cliquer sur Window → Preferences.
PyDev → Interpreters → Python Inter NB: L’installation de Python supposee
Cliquer sur « Browse for python… » deja faite.
Donner un nom a votre interpréteur.
Cliquer sur « Browse… », puis sur OK.

M. NAJOUI - ENSAM - Rabat 13

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help → Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».
Cliquer sur « Next ».
Encore « Next »
Cocher « I accept… »
Cliquer sur « Finish »
Téléchargement…
Cliquer sur « Yes »
Apres relancement d’eclipse.
Cliquer sur Window → Preferences.
PyDev → Interpreters → Python Inter
Cliquer sur « Browse for python… »
Donner un nom a votre interpréteur.
Cliquer sur « Browse… », puis sur OK → OK.

M. NAJOUI - ENSAM - Rabat 14

7
12/11/2021

Installation et Configuration

Configuration de Python sur eclipse :


Lancer eclipse, ensuite cliquer sur Help → Install New Software. Taper
« http://pydev.org/updates » dans le champ « Work with » puis cliquer sur
« Entrer ».
Cocher « PyDev ».
Cliquer sur « Next ».
Encore « Next »
Cocher « I accept… »
Cliquer sur « Finish »
Téléchargement…
Cliquer sur « Yes »
Apres relancement d’eclipse.
Cliquer sur Window → Preferences.
PyDev → Interpreters → Python Inter
Cliquer sur « Browse for python… »
Donner un nom a votre interpréteur.
Cliquer sur « Browse… », puis sur OK → OK.
OK

M. NAJOUI - ENSAM - Rabat 15

Installation et Configuration

Ecrire votre premier programme Python sur eclipse :


Lancer eclipse, ensuite aller a Window → Perspective → Open Perspective →
Other.
Choisissez « PyDev » et cliquer sur OK.
Créer votre 1er projet Python en cliquant sur
File → New → PyDev Project

M. NAJOUI - ENSAM - Rabat 16

8
12/11/2021

Installation et Configuration

Ecrire votre premier programme Python sur eclipse :


Lancer eclipse, ensuite aller a Window → Perspective → Open Perspective →
Other.
Choisissez « PyDev » et cliquer sur OK.
Créer votre 1er projet Python en cliquant sur
File → New → PyDev Project
Donner un nom au projet
Cocher « Create ‘src’… »
Cliquer sur « Finish »

M. NAJOUI - ENSAM - Rabat 17

Installation et Configuration

Ecrire votre premier programme Python sur eclipse :


Lancer eclipse, ensuite aller a Window → Perspective → Open Perspective →
Other.
Choisissez « PyDev » et cliquer sur OK.
Créer votre 1er projet Python en cliquant sur
File → New → PyDev Project
Donner un nom du projet
Cocher « Create ‘src’… »
Cliquer sur « Finish »
Créer un nouveau module via
File → New → PyDev Module
Indiquer le chemin du dossier ‘src’
Donner un nom de votre module « .py »
Cliquer sur « Finish »
Si des fenêtres s’affichent, cliquer sur OK

M. NAJOUI - ENSAM - Rabat 18

9
12/11/2021

Installation et Configuration

Ecrire votre premier programme Python sur eclipse :


Lancer eclipse, ensuite aller a Window → Perspective → Open Perspective →
Other.
Choisissez « PyDev » et cliquer sur OK.
Créer votre 1er projet Python en cliquant sur
File → New → PyDev Project
Donner un nom du projet
Cocher « Create ‘src’… »
Cliquer sur « Finish »
Créer un nouveau module via
File → New → PyDev Module
Indiquer le chemin du dossier ‘src’
Donner un nom de votre module « .py »
Cliquer sur « Finish »
Si des fenêtres s’affichent, cliquer sur OK
Ecrire l’instruction : print("Hello, this is my first python project :) ")
Ensuite RUN et vous obtenu le message “Hello……”
Congrats! you succeed to create your first PYTHON project ☺
M. NAJOUI - ENSAM - Rabat 19

Généralités

Les commentaires
’’’ Ceci est un commentaire ecrit
sur plusieurs lignes ’’’
# Autre maniere de commenter une ligne.

La création d’une variable en python n’oblige pas la définition de son type.


n = 7 # définir n et lui donner la valeur 7
msg = "Quoi de neuf ?" # affecter la valeur "Quoi de neuf ?" à msg
pi = 3.14159 # assigner la valeur 3.14159 à la variable pi
a = 2+4
print(a) # affiche 6 a l'ecran
premiers = [1,3,5,7,11] # Une liste des nombres premiers (premiers[1]=3)
marque = ['citroen','peugeot','renault’]
print(marque)
x = y = 7 #affectation multiple possible en python.
a, b = "bonjour", 56.1 #affectation multiple possible en python.
Chaque variable python a : un nom, une valeur et un type (implicite).
Plusieurs instructions dans la même ligne doivent être séparées par « ; »
x,y = ‘j\’ai 20 ans', 50.2
print(x); print(y)
print (type(y), y, x)
import sys; x = 'foo'; sys.stdout.write(x + '\n')

M. NAJOUI - ENSAM - Rabat 20

10
12/11/2021

Généralités

Communication entre machine et utilisateur : lecture & écriture.


print ("Quel est votre prenom ?")
prenom = input() # lecture (cf. scanf du C)
print ("Bonjour " + prenom)
print ("Nous vous souhaitons la bienvenue")

print ("Bonjour " + input("Quel est votre prenom ? "))


print ("Nous vous souhaitons la bienvenue")

Si vous voulez entrer des nombres, n’oublier pas de faire un ‘caste’ :


i = int(input("Donner un nombre entier "))
x = float(input("Donner un nombre reel "))
print(i+x)

Sans l’utilisation du ‘caste’ la valeur retournée par input() sera toujours considérée comme une chaine
de caractère :
ii = input("Donner un nombre entier ")
xx = input("Donner un nombre reel ")
print(i+x)

M. NAJOUI - ENSAM - Rabat 21

Généralités

Les types :
Entiers (32 bits) : 0, -14, 328…
Entiers longs : 2L, 18446744073709551616…
Réels : 2., 1.5, -6.7, 2.03e-7 …
Complexes : 3 + 7j, 3 + 7J
Booléens : True, False.
Chaines de caractères :
strr = 'Hello World!’
print (strr) # Prints complete string
print (strr[0]) # Prints first character of the string
print (strr[-1]) # Prints last character of the string
print (strr[2:5]) # Prints characters starting from 3rd to 5th
print (strr[2:]) # Prints string starting from 3rd character
print (strr[-1::-1]) # Prints “!dlroW olleH”
print (strr * 2) # Prints string two times
print (strr + "TEST“) # Prints concatenated string
Les opérations de base :
+, -, *, /, %, // (div avec un quotient entier, exple : [9//2 = 4], [13.0//3.0 = 4.0])
Puissance : x**y, pow(x,y)
Valeur absolue : abs()
Comparaison : ==, is, !=, <>, is not, >, >=, <, <=, in, not in.
M. NAJOUI - ENSAM - Rabat 22

11
12/11/2021

Généralités

Les opérations de base :


Operateurs bitwise : |, &, ^, ~, >>, <<
Operateurs logique : or, and, not.

Exécuter l’instruction « help(command) » afin d’avoir de l’aide sur


« command ».
help(list) # donne le resultat suivant :
class list(object)
| list() -> new empty list
| append(...)
| list(iterable) -> new list initialized from iterable's items
| L.append(object) -- append object to end
|
| count(...)
| Methods defined here:
| L.count(value) -> integer -- return number of occurrences of value
|
| extend(...)
| __add__(...)
| L.extend(iterable) -- extend list by appending elements from the iterable
| x.__add__(y) <==> x+y
| index(...)
| __contains__(...)
| L.index(value, [start, [stop]]) -> integer -- return first index of value.
| x.__contains__(y) <==> y in x
| Raises ValueError if the value is not present.
| __delitem__(...)
| insert(...)
| x.__delitem__(y) <==> del x[y]
| L.insert(index, object) -- insert object before index
| __delslice__(...)
| pop(...)
| x.__delslice__(i, j) <==> del x[i:j]
| L.pop([index]) -> item -- remove and return item at index (default last).
| Use of negative indices is not supported.
| Raises IndexError if list is empty or index is out of range.
| __eq__(...)
| remove(...)
| x.__eq__(y) <==> x==y
| L.remove(value) -- remove first occurrence of value.
| __ge__(...)
| Raises ValueError if the value is not present.
| x.__ge__(y) <==> x>=y
| reverse(...)
| __getattribute__(...)
| L.reverse() -- reverse *IN PLACE*
| x.__getattribute__('name') <==> x.name
| sort(...)
| __getitem__(...)
| L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
| x.__getitem__(y) <==> x[y]
| cmp(x, y) -> -1, 0, 1

M. NAJOUI - ENSAM - Rabat 23

Généralités

Les mots réservés :


and exec not
assert finally or
break for pass
class from print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield

Indentation :
Python n’utilise pas d’accolades pour identifier les blocs de code (class,
fonctions, instructions de contrôle) L’indentation est utilisée en python
pour réaliser la mission des accolades.
if True:
print "True"
else:
print "False"
M. NAJOUI - ENSAM - Rabat 24

12
12/11/2021

Généralités

Comment écrire une instruction sur plusieurs ligne?


Via l’utilisation du caractère « \ » a la fin de chaque ligne sauf le dernier.
total = item_one + \
item_two + \
item_three

Les instructions délimitées par « [] », « {} » ou « () » n’ont pas besoin du


caractère « \ » pour les écrirait sur plusieurs lignes.
days = ['Monday', 'Tuesday', 'Wednesday’,
'Thursday', 'Friday’]

Les guillemets (quotes) : Python accepte des guillemets simple « ’ », double


« "» ou triple « ’’’ » « """» pour indiquer des chaines de caracteres.
w = 'word’
s = "This is a sentence."
p = """This is a paragraph. It is
made up of multiple lines and sentences."""

M. NAJOUI - ENSAM - Rabat 25

Généralités

Format Symbol Conversion


Les formats d’affichage :
%c character
%s string conversion via str() prior to formatting
%i signed decimal integer
%d signed decimal integer
%u unsigned decimal integer
%o octal integer
%x hexadecimal integer (lowercase letters)
%X hexadecimal integer (UPPERcase letters)
%e exponential notation (with lowercase 'e')
%E exponential notation (with UPPERcase 'E')
%f floating point real number
%g the shorter of %f and %e
%G the shorter of %f and %E

print("my name is %s, I'm %d years old and my height is %f m" %('Mohamed', 20, 1.8))

M. NAJOUI - ENSAM - Rabat 26

13
12/11/2021

Les types standards

Cinq types standard de données sont utilisés dans Python :


Les nombres
Les chaines de caractères (string)
Les listes
Les tuples
Les dictionnaires

Pour les nombres, python support les types suivants : int, long, float et
complex. Le système octal ou hexadécimal peut être utiliser pour initialiser des
entiers. o1 = 0o71; o2 = -0o33
h1 = 0xA1; h2 = -0xb3
b1 = 0b11001
x1 = int(o1); y1 = long(h1)
x2 = long(o2); y2 = int(h2)
print(o1); print(h1); print(b1);
print(x1); print(y1); print(x2); print(y2)
print("The Octal representation of 21 is " + oct(21))
print("The Hexadecimal representation of 21 is " + hex(21))
print("The Binary representation of 21 is " + bin(21))
Pour les « String » : ensemble de caractères regroupés entre simple ou double
guillemets. « + » Concaténation && « * » Répétition.
print('Engineer\t' * 4)
M. NAJOUI - ENSAM - Rabat 27

Les types standards : Listes


Liste : un type de variable dans laquelle on peut mettre plusieurs éléments
séparés par « , » et délimités par « [] ».
Les éléments d’une liste peuvent être de différents types.
Li = [] # creates an empty list
lis = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']
print (lis) # Prints complete list
print (lis[0]) # Prints first element of the list
print (lis[1:3]) # Prints elements starting from 2nd till 3rd
print (lis[2:]) # Prints elements starting from 3rd element
print (tinylist * 2)# Prints list two times
print (lis + tinylist) # Prints concatenated lists
print (lis[-1]) # Prints last element
print(lis[-1::-1])
Li = lis + tinylist; print(Li)
Ajouter des éléments a une liste : append() Li.append('Med'); print(Li)
Li.extend(tinylist); print(Li)
print(Li.index('Med'))
Li.insert(7, 'Eng'); print(Li)
Connaitre la longueur d’une liste : len() Li.clear(); print(Li)
print(len(Li))

Fonctions : range() et list()


range() : génère des nombres entiers compris dans un intervalle.
list() : permet de créer une liste.
L = list ( range (10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L = list ( range (0, 5)) [0, 1, 2, 3, 4]
L = list ( range (15 , 20)) [15 , 16, 17, 18, 19]
L = list ( range (0, 1000 , 200)) [0, 200 , 400 , 600 , 800]
L = list ( range (2, -2, -1)) [2, 1, 0, -1]
M. NAJOUI - ENSAM - Rabat 28

14
12/11/2021

Les types standards : Listes


Liste : un type de variable dans laquelle on peut mettre plusieurs éléments
séparés par « , » et délimités par « [] ».

Supprimer un élément d’une liste : del()


L = [‘a’, ‘b’, ‘c’, ‘d’]
del(L[1])
print (L) [a, c, d]

Les listes de listes.


J = [1, 2, 3, 4, 5, 6]
M = [ L, J]
print (M[0]) [a, c, d]
print (M[1][1]) 2

L = ['b', 'c', 'a', 'd']


print(L)
L.sort(key=None, reverse=False)
print(L)

M. NAJOUI - ENSAM - Rabat 29

Fonctions pour manipulation des listes

Nbr Methods with Description

1 list.append(obj) : Appends object obj to list

2 list.count(obj) : Returns count of how many times obj occurs in list


Nbr Function with Description
3 list.extend(seq) : Appends the contents of seq to list
1 cmp(list1, list2) : Compares elements of both lists.
4 list.index(obj) : Returns the lowest index in list that obj appears
2 len(list) : Gives the total length of the list.

3 max(list) : Returns item from the list with max value. 5 list.insert(index, obj) : Inserts object obj into list at offset index

4 min(list) : Returns item from the list with min value. 6 list.pop(obj=list[-1]) : Removes and returns last object or obj from list

5 list(seq) : Converts a tuple into list. 7 list.remove(obj) : Removes object obj from list

8 list.reverse() : Reverses objects of list in place

9 list.sort([func]) : Sorts objects of list, use compare func if given

M. NAJOUI - ENSAM - Rabat 30

15
12/11/2021

Les types standards : Listes

Exercices :
Constituez une liste « W » contenant les 7 jours de la semaine.
1. Essayer de récupérer les 3 premiers jours de la semaine ensuite ceux du week-end ?
2. Cherchez un autre moyen pour arriver au même résultat.
3. Trouvez deux manières pour accéder au dernier jour de la semaine.
4. Inversez les jours de la semaine en une commande.
Créez 4 listes H, P, E et A contenant les mois correspondants aux saisons hiver, printemps,
été et automne, respectivement. Créez ensuite une liste S (saisons) contenant les listes H, P,
E et A . Prévoyez ce que renvoient les instructions suivantes, ensuite vérifiez-le via
l’interpréteur :
1. S[2]
2. S[1][0]
3. S[1:2]
4. S[:][1].
Affichez la table de multiplication par 9 en une seule commande.
En une seule commande, Combien y a-t-il de nombres pairs dans l’intervalle [20, 30001]
inclus ?

M. NAJOUI - ENSAM - Rabat 31

Les types standards : Tuples


Les tuples : Comme les listes, ces éléments sont séparés par des « , », mais ils
sont délimités par des « () ».
tupl = ( 'abcd', 786 , 2.23, 'john', 70.2 )
ttuple = (123, 'john')
print (tupl) # Prints complete tuple
print (tupl[0]) # Prints first element of the tuple
print (tupl[1:3]) # Prints elements starting from 2nd till 3rd
print (tupl[2:]) # Prints elements starting from 3rd element
print (ttuple * 2) # Prints ttuple two times
print (tupl + ttuple) # Prints concatenated tuples
TT = 20,30,40,50 # Possible when there is no confusion
print(TT) # Prints a tuple

Les tuples ne peuvent pas être modifiés.


tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 )
liste = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tuple[2] = 1000 # Invalid syntax with tuple
liste[2] = 1000 # Valid syntax with list

Ajouter des éléments a un tuple :


T = (1, 2, 3, 4)
Tt = T + (5,)
print (Tt); K = Tt + (10, 11, 12); print (K)

Créer un tuple via la fonction range().


TT = tuple(range(10))
print(TT)
Ti = tuple("ATGCCGCGAT")
print(Ti)

M. NAJOUI - ENSAM - Rabat 32

16
12/11/2021

Les types standards : Dictionnaires


Les dictionnaires : ce sont similaires aux tableaux associatifs (BD) et basés sur
des éléments organisés en paires (clé : valeur). La clé peut être un nombre,
string ou composé.
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
mydict = {'name': 'john','code':6734, 'dept': 'sales’}
print (dict['one’]) # Prints value for 'one' key
print (dict[2]) # Prints value for 2 key
print (mydict) # Prints complete dictionary
print (mydict.keys()) # Prints all the keys
print (mydict.values()) # Prints all the values

NB : Les dictionnaires ne sont pas ordonnés.


La méthode __contains__() permet de vérifier si une clé existe.
v = mydict.__contains__('dept’)
print(v) # prints True

La méthode get() permet de retourner la valeur correspondant au clé passé en


argument s’il existe, si non retournera None.
v = mydict.get('dept’)
print(v)
v1 = mydict.get('jk’)
print(v1)
print(mydict.items())

M. NAJOUI - ENSAM - Rabat 33

Les types standards : Dictionnaires


Les dictionnaires : ce sont similaires aux tableaux associatifs (BD) et basés sur
des éléments organisés en paires (clé : valeur). La clé peut être un nombre,
string ou composé.

Method & Description


dict.clear() : Removes all elements of dictionary dict
dict.copy() : Returns a shallow copy of dictionary dict
dict.fromkeys() : Create a new dictionary with keys from seq and values set to value.
dict.get(key, default=None) : For key key, returns value or default if key not in dictionary
dict.items() : Returns a list of dict's (key, value) tuple pairs
dict.keys() : Returns list of dictionary dict's keys
dict.update(dict2) : Adds dictionary dict2's key-values pairs to dict

dict.values() : Returns list of dictionary dict's values

dic = {}
print(dic.fromkeys((2,3,4), 'val'))

For more details visit : https://www.tutorialspoint.com/python3/python_dictionary.htm

M. NAJOUI - ENSAM - Rabat 34

17
12/11/2021

Les types standards


Les conversions de types :
Function & Description
int(x) : Converts x to an integer.
long(x) : Converts x to a long integer.
float(x) : Converts x to a floating-point number.
complex(real [,imag]) : Creates a complex number.
str(x) : Converts object x to a string representation.
repr(x) : Converts object x to an expression string.
eval(str) : Evaluates a string and returns an object.
tuple(s) : Converts s to a tuple.
list(s) : Converts s to a list.
dict(d) : Creates a dictionary. d must be a sequence of (key,value) tuples.
chr(x) : Converts an integer to a character.
ord(x) : Converts a single character to its integer value.
hex(x) : Converts an integer to a hexadecimal string.
oct(x) : Converts an integer to an octal string.

M. NAJOUI - ENSAM - Rabat 35

Les structures de contrôle : IF

if condition :
instruction
elif condition :
instruction
else :
instruction

Exemple 1: Exemple 2:
a = 10. L = [1, 3, 6, 8]
if a > 0: if 9 in L:
print ('a est strictement positif’) print ('9 est dans la liste L’)
if a >= 10: else:
print ('a est un nombre’) L.append(9)
else:
print ('a est un chiffre’)
a += 1
elif a is not 0: if a>4 or b!=0 :
print ('a est strictement négatif’) print('OK_1')
else: elif a<=4 and b == 0 :
print ('a est nul’) print('OK_2')
else :
print('Not OK')

M. NAJOUI - ENSAM - Rabat 36

18
12/11/2021

Les structures de contrôle : WHILE

while <test1>:
<blocs d’instructions 1> Exemple 2:
# boucle infinie
if <test2>: break while 1:
if <test3>: continue pass

else:
<blocs d’instructions 2>
Break : quitter la boucle sans passer par else,
Continue : recommence une nouvelle itération de la boucle,
Pass : ne fait rien, x = 10
Else : exécuté ssi la boucle se termine normalement. while x > 1: if x == 1:
print (‘Loop is finished')
Exemple 1:
break
x = y // 2 if x == 2 :
while x > 1: print('Continue')
if y % x == 0: continue
print (y, 'est facteur de’, x) if x > 1 :
break print('decrement x')
x = x-1 pass
else: x-=1
print (y, 'est premier’) else:
print ('Else of while loop')

M. NAJOUI - ENSAM - Rabat 37

Les structures de contrôle : FOR

for <cible> in <objet>:


<blocs d’instructions>
if <test1>: break
if <test2>: continue
else:
<blocs d’instructions>

Exemple 1: Exemple 2:
sum = 0 s = 'bonjour'
for i in [1, 2, 3, 4]: for c in s:
sum += i print (c)
print (sum)
L = [ x + 10 for x in range(10)]
prod = 1
for p in range(1, 10):
prod *= p
print (prod)
list1 = [10, 21, 4, 45, 66, 93]
only_odd = [num for num in list1 if num % 2 == 1]
print(only_odd)

M. NAJOUI - ENSAM - Rabat 38

19
12/11/2021

Les structures de contrôle : MAP & ZIP

zip : permet de parcourir plusieurs séquences en parallèle


map : applique une méthode sur une ou plusieurs séquences
Exemples:

L1 = [1, 2, 3]
L2 = [4, 5, 6]
yy = zip(L1, L2) # Returns an iterator of tuples based on the iterable objects
xx = set(yy) # Converting iterator to set
print(xx)
for (x, y) in xx:
print (x, y, '--', x + y)

def addition(n):
return n + n

numbers = (1, 2, 3, 4)
result = map(addition, numbers)
print(list(result))

S = '0123456789'
print (list(map(int, S)))

S1 = 'abc'
S2 = 'xyz123'
print (list(zip(S1, S2)))

M. NAJOUI - ENSAM - Rabat 39

Les fonctions

Definition :
def <nom_fonction>(arg1, arg2,... argN):
... def table7(): def table(base):
n = 1 n = 1
bloc d'instructions while n < 11:
while n < 11:
... print (n*7) print (n*base)
return <valeur(s)> n += 1 n += 1

def table(base, debut=0, fin=11):


print ('Fragment de la table de multiplication par', base, ‘:’)
n = debut
l = []
while n < fin:
print (n*base)
l.append(n*base)
n += 1
return l

Déclaration d'une fonction sans connaître ses paramètres


def f(*a, **m):
print (a)
print (m)
f(1, 3, 'b', j = 1, k = 3)

Lambda : A lambda function can take any number of arguments, but can only have one expression.
f = lambda x, i : x**i
print(f(2, 4))
M. NAJOUI - ENSAM - Rabat 40

20
12/11/2021

Les fonctions

Passage par reference vs valeur :


# Function definition is here # Function definition is here
def changeme1( mylist ): def changeme2( mylist ):
"This changes a passed list into this function" "This changes a passed list into this function"
mylist.append([1,2,3,4]); mylist = [1,2,3,4]; # This will assign new reference in mylist
print ("Values inside the function: ", mylist) print ("Values inside the function: ", mylist)
return return

# Now you can call changeme function # Now you can call changeme function
mylist = [10,20,30]; mylist = [10,20,30];
changeme1( mylist ); changeme2( mylist );
print ("Values outside the function: ", mylist) print ("Values outside the function: ", mylist)

total = 0; # This is global variable.


# Function definition is here x = "global "
def sum( arg1, arg2 ): def foo():
# Add both the parameters and return them." global x
total = arg1 + arg2; # Here total is local variable. y = "local"
print ("Inside the function local total : ", total) x = x * 2
return total; print(x)
print(y)
# Now you can call sum function foo()
sum( 10, 20 );
print ("Outside the function global total : ", total)

C/C Les variables globales ne sont pas toujours modifiees par les fonctions
qu’apres utilization du keyword “global”.
M. NAJOUI - ENSAM - Rabat 41

Fonctions mathématiques

Function & description Function & Description


abs(x) :The absolute value of x: the (positive) distance between x and
zero. acos(x) : Return the arc cosine of x, in radians.

ceil(x) : The ceiling of x: the smallest integer not less than x asin(x) : Return the arc sine of x, in radians.
cmp(x, y) : -1 if x < y, 0 if x == y, or 1 if x > y
atan(x) : Return the arc tangent of x, in radians.
x
exp(x) : The exponential of x: e
atan2(y, x) : Return atan(y / x), in radians.
fabs(x) : The absolute value of x.
floor(x) : The floor of x: the largest integer not greater than x cos(x) : Return the cosine of x radians.
log(x) : The natural logarithm of x, for x> 0 hypot(x, y) : Return the Euclidean norm, sqrt(x*x + y*y).
log10(x) : The base-10 logarithm of x for x> 0.
sin(x) : Return the sine of x radians.
max(x1, x2,...) : The largest of its arguments: the value closest to positive
infinity tan(x) : Return the tangent of x radians.
min(x1, x2,...) : The smallest of its arguments: the value closest to
negative infinity degrees(x) : Converts angle x from radians to degrees.

modf(x) : The fractional and integer parts of x in a two-item tuple. Both radians(x) : Converts angle x from degrees to radians.
parts have the same sign as x. The integer part is returned as a float.
choice(seq) : A random item from a list, tuple, or string.
pow(x, y) : The value of x**y.
randrange ([start,] stop [,step]) : A randomly selected element from
round(x [,n]) : x rounded to n digits from the decimal point. Python range(start, stop, step)
rounds away from zero as a tie-breaker: round(0.5) is 1.0 and round(-
0.5) is -1.0. random() : A random float r, such that 0 is less than or equal to r and
sqrt(x) : The square root of x for x > 0 r is less than 1

M. NAJOUI - ENSAM - Rabat 42

21
12/11/2021

Fonctions pour les chaines de caractères

Methods & Description


capitalize() : Capitalizes first letter of string
count(str, beg= 0,end=len(string)) : Counts how many times str occurs in string or in a substring of string if starting index beg and ending index end are
given.
endswith(suffix, beg=0, end=len(string)) : Determines if string or a substring of string (if starting index beg and ending index end are given) ends with suffix;
returns true if so and false otherwise.
expandtabs(tabsize=8) : Expands tabs in string to multiple spaces; defaults to 8 spaces per tab if tabsize not provided.
find(str, beg=0 end=len(string)) : Determine if str occurs in string or in a substring of string if starting index beg and ending index end are given returns index
if found and -1 otherwise.
index(str, beg=0, end=len(string)) : Same as find(), but raises an exception if str not found.
isalnum() : Returns true if string has at least 1 character and all characters are alphanumeric and false otherwise.
isalpha() : Returns true if string has at least 1 character and all characters are alphabetic and false otherwise.
isdigit() : Returns true if string contains only digits and false otherwise.
islower() : Returns true if string has at least 1 cased character and all cased characters are in lowercase and false otherwise.
isnumeric() : Returns true if a unicode string contains only numeric characters and false otherwise.
isspace() : Returns true if string contains only whitespace characters and false otherwise.
istitle() : Returns true if string is properly "titlecased" and false otherwise.
isupper() : Returns true if string has at least one cased character and all cased characters are in uppercase and false otherwise.
join(seq) : Merges (concatenates) the string representations of elements in sequence seq into a string, with separator string.
len(string) : Returns the length of the string
lower() : Converts all uppercase letters in string to lowercase.

M. NAJOUI - ENSAM - Rabat 43

Fonctions pour les chaines de caractères


Methods & Description

lstrip() : Removes all leading whitespace in string.

max(str) : Returns the max alphabetical character from the string str.

min(str) : Returns the min alphabetical character from the string str.

replace(old, new [, max]) : Replaces all occurrences of old in string with new or at most max occurrences if max given.

rfind(str, beg=0,end=len(string)) : Same as find(), but search backwards in string.

rindex( str, beg=0, end=len(string)) : Same as index(), but search backwards in string.

rjust(width,[, fillchar]) : Returns a space-padded string with the original string right-justified to a total of width columns.

rstrip() : Removes all trailing whitespace of string.

split(str="", num=string.count(str)) : Splits string according to delimiter str (space if not provided) and returns list of substrings; split into at most num substrings if
given.

splitlines( num=string.count('\n’)) : Splits string at all (or num) NEWLINEs and returns a list of each line with NEWLINEs removed.

startswith(str, beg=0,end=len(string)) : Determines if string or a substring of string (if starting index beg and ending index end are given) starts with substring str;
returns true if so and false otherwise.

strip([chars]) : Performs both lstrip() and rstrip() on string.

swapcase() : Inverts case for all letters in string.

title() : Returns "titlecased" version of string, that is, all words begin with uppercase and the rest are lowercase.

upper() : Converts lowercase letters in string to uppercase.

isdecimal() : Returns true if a unicode string contains only decimal characters and false otherwise.

M. NAJOUI - ENSAM - Rabat 44

22
12/11/2021

Date and Time


import time;
ticks = time.time()
print ("Number of ticks since 12:00am, January 1, 1970:", ticks)
localtime = time.localtime(time.time())
print ("Local current time 1 :", localtime)
localtime = time.asctime( time.localtime(time.time()) )
print ("Local current time 2 :", localtime )

Index Field Values

0 4-digit year 2016

1 Month 1 to 12

2 Day 1 to 31

3 Hour 0 to 23

4 Minute 0 to 59

5 Second 0 to 61 (60 or 61 are leap-seconds)

6 Day of Week 0 to 6 (0 is Monday)

7 Day of year 1 to 366 (Julian day)

8 Daylight savings -1, 0, 1, -1 means library determines DST

M. NAJOUI - ENSAM - Rabat 45

Date and Time

import calendar
cal = calendar.month(2020, 12)
print ("Here is the calendar:")
print (cal)

M. NAJOUI - ENSAM - Rabat 46

23
12/11/2021

Les fichiers

Ouvrir un fichier : id = open(‘file_name’, ‘mode’)


Les modes sont :
‘r’ : Lecture, le fichier doit etre present.
‘w’ : Ecriture, si le fichier n’existe pas, il sera creer. S’il existe, son
contenu sera ecrase.
‘a’ : Append, si le fichier n’existe pas, il sera creer.
‘r+’ : Lecture & Ecriture, le fichier doit etre present.
id = open('toto.txt', 'w') id1 = open(‘toto.txt', 'r')
id.write("This is the first line") for li in id1 :
id.write("This is the second line") print(li)
id.write("This is the third line")
id.close()

id.closed : Returns true if file is closed, false otherwise.


id.mode : Returns access mode with which file was opened.
id.name : Returns name of the file.
id.readline() : Reads one line
id.read() : Reads the whole file
Id.tell() : Tells the current position within the file.
readlines(), writlines()…

M. NAJOUI - ENSAM - Rabat 47

Les fichiers

Renommer et supprimer un fichier :


import os
# Rename a file from toto.txt to titi.txt
os.rename( "toto.txt", "titi.txt" )
# Delete file titi.txt
os.remove("titi.txt")
Creer un nouveau repertoire :
import os
# Create a directory "test"
os.mkdir("test")
# Change the current dir to "/home/newdir"
os.chdir("/home/newdir")
# Get the current working directory
os.getcwd()
# Remove "test" directory.
os.rmdir("test")
# List files of directory.
os.listdir("directory")

The os Python module provides a big range of useful methods to manipulate files and
directories.

M. NAJOUI - ENSAM - Rabat 48

24
12/11/2021

Les expressions régulières « re »

Le module re nous permettrons d’utiliser des expressions régulières au sein de


Python.
Une expression régulière est une suite de caractères qui a pour but de décrire
un fragment de texte.
Cette suite de caractères est appelée motif (en anglais pattern),
Le motif est constitué de deux types de caractères :
Normaux,
Métacaractères : ayant une signification particulière, par exemple le
caractère ˆ signifie début de ligne et non pas le caractère ‘chapeau’.

Les expressions régulières sont nécessaires pour toute opération de recherche


« parsing » dans différents types de fichiers.
Pour plus de détails sur les expressions régulières, vous pouvez consulter les
liens suivants :
https://docs.python.org/3/library/re.html
https://www.regular-expressions.info
https://regexr.com/
M. NAJOUI - ENSAM - Rabat 49

Les expressions régulières « re »


Les métacaractères :
ˆ Début de chaîne de caractères ou de ligne. Exemple : ˆATG est retrouvée dans la chaîne de caractères ATGCGT mais pas dans la CCATGTT.
$ Fin de chaîne de caractères ou de ligne. Exemple : ATG$ est retrouvée dans la chaîne de caractères TGCATG mais pas dans la chaîne
CCATGTT.
. N’importe quel caractère. Exemple : A.G est retrouvée dans ATG, AtG, A4G, mais aussi dans A-G ou dans A G.
[ABC] Le caractère A ou B ou C (un seul caractère). Exemple : T[ABC]G est retrouvée dans TAG, TBG ou TCG, mais pas à TG.
[A-Z] N’importe quelle lettre majuscule. Exemple : C[A-Z]T est retrouvée dans CAT, CBT, CCT. . .
[a-z] N’importe quelle lettre minuscule.
[0-9] N’importe quel chiffre.
[A-Za-z0-9] N’importe quel caractère alphanumérique.
[ˆAB] N’importe quel caractère sauf A et B. Exemple : CG[ˆAB]T est retrouvée dans CG9T, CGCT. . . mais pas dans CGAT ni dans CGBT.
\ Caractère d’échappement (protéger certains caractères). Exemple : \+ désigne le caractère + littéral. La regex A\.G est retrouvée dans A.G
et non pas dans A suivi de n’importe quel caractère, suivi de G.
* 0 à n fois le caractère précédent ou l’expression précédente. Exemple : A(CG)*T est retrouvée dans AT, ACGT, ACGCGT. . .
+ 1 à n fois le caractère précédent ou l’expression précédente. Exemple : A(CG)+T est retrouvée dans ACGT, ACGCGT. . . mais pas dans AT.
? 0 à 1 fois le caractère précédent ou l’expression précédente. Exemple : A(CG)?T est retrouvée dans AT ou ACGT.
{n} n fois le caractère précédent ou l’expression précédente. Exemple : A(CG){2}T est retrouvée dans ACGCGT mais pas dans ACGT,
ACGCGCGT ou ACGCG.
{n,m} n à m fois le caractère précédent ou l’expression précédente. Exemple : A(C){2,4}T est retrouvée dans ACCT, ACCCT et ACCCCT mais
pas dans ACT, ACCCCCT ou ACCC.
{n,} Au moins n fois le caractère précédent ou l’expression précédente. Exemple : A(C){2,}T est retrouvée dans ACCT, ACCCT et ACCCCT
mais pas à ACT ou ACCC.
{,m} Au plus m fois le caractère précédent ou l’expression précédente. Exemple : A(C){,2}T est retrouvée dans AT, ACT et ACCT mais pas
dans ACCCT ou ACC.
(CG|TT) Les chaînes de caractères CG ou TT. Exemple : A(CG|TT)C est retrouvée dans ACGC ou ATTC.
\d remplace n’importe quel chiffre (digit), équivalent à [0-9].
\w remplace n’importe quel caractère alphanumérique (word character), équivalent à [0-9A-Za-z_].
\s remplace les espaces, tabulations, retours chariots …

M. NAJOUI - ENSAM - Rabat 50

25
12/11/2021

Les expressions régulières « re »


Les métacaractères :

Expression avec \ Reg exp equivalent


\d [0-9]
\D [^0-9]
\s [ \t\n\r]
\S [^ \t\n\r\f\v]
\w [a-zA-Z0-9_]
\W [^a-zA-Z0-9_]

M. NAJOUI - ENSAM - Rabat 51

Les expressions régulières « re »

La fonction search() permet de rechercher un motif au sein d’une chaîne de


caractères avec une syntaxe de la forme search(motif, chaine, flag). Si motif est
retrouvé dans chaine, Python renvoie un objet du type SRE_Match.
La function match() renvoie un object du type SRE_Match seulement lorsque
l’expression régulière correspond au début de la chaîne de caractères, si non,
elle renvoie « None »
la fonction fullmatch() renvoie un object du type SRE_Match ssi l’expression
régulière correspond exactement à la chaîne de caractères.
import re
an = "girafe tigre singe"
print(re.search("[a-z] [a-z]", an))
if re.search('g+', an) :
print('OK')
print(re.match('t.*', an))
print(re.match('g.*', an))
print(re.fullmatch('tiger', an))
toto = 'happiness'
print(re.fullmatch('happiness', toto))

M. NAJOUI - ENSAM - Rabat 52

26
12/11/2021

Les expressions régulières « re »

Lorsqu’on a besoin de tester la même expression régulière sur plusieurs chaînes de


caractères, il est pratique de compiler l’expression régulière préalablement à l’aide de la
fonction compile() qui renvoie un objet de type SRE_Pattern.
regex = re.compile('([0-9]+)\.([0-9]+)')
res = regex.search("pi vaut 3.14 et e vaut 2.72")
print(res.group(0))
print(res.group(1))
print(res.group(2))
print(res.start())
print(res.end())
print(regex.match("width = 50.05 m"))
print(regex.match("width = 50.05 m", 8))
print(regex.fullmatch("width = 50.05 m"))
print(regex.fullmatch("width = 50.05 m",9,12))
La totalité de la correspondance est donné par group(0), le premier élément entre
parenthèse est donné par group(1) et le second par group(2) etc…
Les fonctions start() et end() donnent respectivement la position de début et de fin de la
zone qui correspond à l’expression régulière.
Notez bien que la fonction search() ne renvoie que la première zone qui correspond à
l’expression régulière, même s’il en existe plusieurs.
Afin de récupérer toutes les correspondances, la fonction findall() pourra être utilisée.
res1 = regex.findall("pi vaut 3.14 et e vaut 2.72")
print(res1)

M. NAJOUI - ENSAM - Rabat 53

Les expressions régulières « re »

La fonction sub() permet d’effectuer des substitutions (remplacements). Par


défaut la fonction sub(chaine1,chaine2) remplace toutes les occurrences
correspondant a l’expression régulière dans chaine2 par chaine1. Si vous
souhaitez ne remplacer que les n premières occurrences, utilisez l’argument
count=n.
regex = re.compile('[0-9]+\.[0-9]+')
r1 = regex.sub('quelque chose',"pi vaut 3.14 et e vaut 2.72")
print(r1)
r2= regex.sub('quelque chose',"pi vaut 3.14 et e vaut 2.72", count=1)
print(r2)
r3= regex.sub('quelque chose',"pi vaut 3.14 et e vaut 2.72", count=2)
print(r3)

Il est aussi possible d’utiliser sub() afin de faire des remplacements dans
chaine2 suivant les correspondances des groupes.
regex = re.compile('([0-9]+)\.([0-9]+)')
p = "pi vaut 3.14 et e vaut 2.72"
r1 = regex.sub("approximativement \\1",p)
print(r1)
r2 = regex.sub("approximativement \\1 puis .\\2",p)
print(r2)

M. NAJOUI - ENSAM - Rabat 54

27
12/11/2021

Les expressions régulières « re »

m = re.match(r"(\w+) (\w+) ([a-z]+) ([A-Za-z]+)", "Muhammad ibn musa Alkhawarizmi, mathematician")


print(m[0]+'\n'+m[1]+'\n'+m[2]+'\n'+m[3]+'\n'+m[4])
m = re.match(r"(\d+)\.(\d+)", "14.162")
print(m.groups())

txt = """ I'm a senior RnD engineer


with more than 10 years
of experience on SW dev and test"""
print(re.split('\n+', txt))

text = "He is a person with a grateful behavior in a wonderful company"


for m in re.finditer(r"\w+ul", text):
print('%02d-%02d: %s' % (m.start(), m.end(), m.group(0)))

txt = "Python is easy to learn"


x = re.search("\s", txt)
print("The first white-space character is located in position:", x.start())
x = re.split("\s", txt)
print(x)
# Split the string only at the first occurrence
x = re.split("\s", txt, 1)
print(x)
M. NAJOUI - ENSAM - Rabat 55

Le module « numpy »

La bibliothèque numpy (http://www.numpy.org/) permet d’effectuer des calculs


numériques.
Elle permet d’effectuer des calculs sur des vecteurs ou des matrices, élément par
élément, via un nouveau type d’objet appelé array.
Elle contient des fonctions de base pour faire de l’algèbre linéaire (np.transpose(a),
dot(a,b), linalg.inv(a), linalg.det(a), linalg.eig(a)), des transformées de Fourier
(np.fft.fft(y)) ou encore des nombres aléatoires.
1. Installer numpy en lançant la commande ‘pip’ sur une fenêtre de commande :
python -m pip install --user numpy scipy matplotlib
1. Il se peut que vous aurez besoin de MAJ la commande pip :
python -m pip install --upgrade pip
2. Accepter les MAJ effectuées afin que vous puissiez utiliser les modules installés dans Eclipse.
import numpy as np
a = np.arange(15).reshape(3, 5)
print(a)
print(a.shape)
print(a.ndim)
print(a.size)
print(a.dtype.name)
b = np.array([1.2, 3.5, 5.1])
print(b.dtype)
print(np.zeros( (3,4) ))
print(np.ones( (2,3,4), dtype=np.int16 ))
print(np.arange( 10, 30, 5 ))
print(np.arange( 0, 2, 0.3 ))
print(np.linspace( 0, 2, 9 )) # 9 numbers from 0 to 2
M. NAJOUI - ENSAM - Rabat 56

28
12/11/2021

Le module « matplotlib »

Le module matplotlib (https://matplotlib.org/) permet de générer des


graphiques. Il est l’outil complémentaire de numpy et scipy lorsque des
l’analyses de données sont nécessaires.
La fonction scatter() permet de représenter des points sous forme de nuage de
points. Les deux premiers arguments correspondent aux valeurs en abscisse et
en ordonnée des points. Les aguments ‘marker’ et ‘color’ sont facultatifs.
import matplotlib.pyplot as plt
temps = [1, 2, 3, 4, 6, 7, 9]
concentration = [5.5, 7.2, 11.8, 13.6, 19.1, 21.7, 29.4]
plt.scatter(temps, concentration, marker='o', color = 'blue')
plt.xlabel("Temps (h)")
plt.ylabel("Concentration (mg/L)")
plt.title("Concentration de produit en fonction du temps")
plt.show()
plt.scatter(temps, concentration, marker='v', color = 'blue')
plt.xlabel("Temps (h)")
plt.ylabel("Concentration (mg/L)")
plt.title("Concentration du produit en fonction du temps")
x = np.linspace( min(temps), max(temps), 50)
y = 2 + 3 * x
plt.plot(x, y, color='green', ls="--")
plt.grid() # To have a grid in the graphic
plt.savefig('concentration_vs_temps1.png', bbox_inches='tight', dpi=200)
plt.bar(temps, concentration) # To plot as a histogram
plt.show()

M. NAJOUI - ENSAM - Rabat 57

Traitement des fichiers Excels

Afin de manipuler des fichiers excels, il faut tout d’abord installer les
bibiliotheques suivantes : xlrd et xlwt.
Xlrd : This package is for reading data and formatting information from Excel
files (ie: .xls).
Xlwt : This package is for writing data and formatting information to Excel files.
pip install xlrd from xlrd import *
import matplotlib.pyplot as plt
pip install xlwt doc = open_workbook("test.xlsx")
print("Nombre de feuilles: ",doc.nsheets)
print("Noms des feuilles: "+str(doc.sheet_names()))
print("les feuilles sont :",doc.sheets())
feuille_1 = doc.sheet_by_index(0)
feuille_2 = doc.sheet_by_name("pyton2")
print("Nom de la feuille 1: ",feuille_1.name)
cols = feuille_1.ncols
rows = feuille_1.nrows
print("Nombre de lignes: ", rows)
print("Nombre de colonnes: ", cols)
print(feuille_1.cell_value(rowx=0, colx=0))
print(feuille_2.cell(2,0)); print(feuille_2.cell(2,0).value)
X = []
Y= []
for r in range(1, rows):
X += [feuille_1.cell_value(rowx=r, colx=0)]
Y += [feuille_1.cell_value(rowx=r, colx=1)]
For more details please visit the following links : plt.plot(X, Y)
plt.show()
http://www.python-excel.org/
http://www.python-simple.com/python-autres-modules-non-standards/xlrd.php
M. NAJOUI - ENSAM - Rabat 58

29
12/11/2021

Traitement des fichiers Excels

Xlwt :

import datetime as dt
import xlwt ## pour importer le module.
#Creation d'un fichier excel
workbook = xlwt.Workbook() # creation de l'objet excel.
sheet = workbook.add_sheet('feuille1') # rajout d'une feuille.
sheet.write(0, 1, 'cellule en haut a gauche') # remplissage de la cellule B1 (cel[0,1]).
sheet.write(2, 0, 5) # remplissage de la cellule A3 avec une valeur numerique (5).
sheet.write(5, 0, dt.date(2021, 1, 7), style = xlwt.easyxf(num_format_str = 'YYYY-MM-DD’))
col = sheet.col(0); col.width = 7000 # on impose a la premiere colonne une largeur donnee.
col = sheet.col(2); col.hidden = True # on rend la 3eme colonne invisible.
workbook.save('myFile.xls') # sauvegarde du fichier excel.

For more details please visit the following links :


http://www.python-excel.org/
http://www.python-simple.com/python-autres-modules-non-standards/xlwt.php

M. NAJOUI - ENSAM - Rabat 59

Exercices

Le module glob recherche tous les chemins correspondant à un motif


particulier selon les règles utilisées par le shell Unix, les résultats sont renvoyés
dans un ordre arbitraire.

import glob
x = glob.glob('*.xlsx')
print(x)

Developper une function permettant de retourner :


Les noms des fichiers ‘.c’ se trouvant dans le repertoire passé en
argument. def my_first_fct(rep):
Le nombre de lignes de chaque fichier C trouvé.

Developper une function permettant de compter le nombre des “instructions


de controle” se trouvant dans un fichier C passé en argument.
def ctrl_sttm_cnt (fil):

M. NAJOUI - ENSAM - Rabat 60

30
12/11/2021

Création des interfaces graphique : tkinter

La bibliothèque graphique la plus utilisée jusqu’à présent avec Python est


tkinter (Tk interface).
Une adaptation de la bibliothèque Tk, développée à l’origine pour le langage
Tcl.
Plusieurs autres bibliothèques graphiques intéressantes ont été proposées pour
Python : wxPython, pyQT, pyGTK, etc.
Tkinter sert à réaliser des interfaces graphiques pour utilisateur (GUI) à l’aide
d’un ensemble de composants graphiques (widgets).

from tkinter import *


r = Tk() # Creates a root window through an instantiation of Tk class
r.title('My First App') # Changes the root window title
r.geometry(“150x150+20+30") # Specify the root window geometry like : WxH+X+Y
r.minsize(100, 100) # Indicates the root window Min Size
r.maxsize(1500, 1500) # Indicates the root window Max Size
# Creates a Button object on the root window r.
b = Button(r, text='Quitter', command=r.quit, fg='red', bg='blue’)
b.pack() # Place the button on the interface
r.mainloop() # Display the interface.

M. NAJOUI - ENSAM - Rabat 61

Création des interfaces graphique : tkinter

tkinter fournit un ensemble de class avec lesquelles nous pourrons créer


plusieurs types de widget :
⇒Button : un bouton de commande
⇒Checkbutton : un bouton logique lié à une variable.
⇒Radiobutton : un bouton parmi un ensemble de boutons pour choisir une option
liée à une variable
⇒Menubutton : un bouton qui propose un menu
⇒Menu : un menu
⇒Canvas : une toile de fond pour y dessiner et y inclure des bitmaps
⇒Label : une zone de texte pour affichage (lecture seulement)
⇒Entry : une zone de texte pour insertion de mots ou de phrases (lecture et écriture)
⇒Message : une fenêtre pour afficher du texte (lecture seulement)
⇒Listbox : une fenêtre pour énumération et action
⇒Text : une fenêtre de texte (lecture et écriture)
⇒Scrollbar : une barre de défilement.
⇒Scale : une échelle qui indique la valeur d’une variable.
⇒Frame : une fenêtre pour en contenir d’autres.

M. NAJOUI - ENSAM - Rabat 62

31
12/11/2021

Création des interfaces graphique : tkinter

Chaque widget a plusieurs attributs dépendant de son type, mais un grand nombre
d’entre eux sont communs :
⇒background : couleur de fond du widget.
⇒activebackground : couleur de fond lorsque le curseur est placé sur le widget
⇒foreground : la couleur du texte quand le curseur n'est pas placé sur le widget
⇒activeforeground : la couleur du texte quand le curseur est placé sur le widget
⇒text : le texte du boutton
⇒textvariable : une variable dont le contenu s'affichera dans le widget
⇒image : une image précédemment chargée
⇒bitmap : un bitmap qui s'affichera dans le widget
⇒width : largeur en caractères du widget
⇒height : hauteur en caractères du widget
⇒justify : right, left, center. Si le widget contient un texte sur plusieurs lignes, la
justification choisie sera appliquée.

Tous les attributs ont des valeurs par défaut ===> code optimisé !!!
b = Button(r, text='Quitter', command=affiche(), fg='red', bg='white', activebackground = 'yellow')
print(b.keys())

M. NAJOUI - ENSAM - Rabat 63

Création des interfaces graphique : tkinter

Afin de modifier les attributs d’un widget après sa création, il faut utiliser les méthodes :
config ou configure.
b.config(bg='green', fg='orange')
print(b.config('bg'))

L’attribut Nom de la Nom de la La valeur La valeur


en question ressource classe par défaut courante

Configure permet de se renseigner sur l’ensemble des attributs d’un widget :


print(b.config())

from tkinter import *


win = Tk()
tex1 = Label(win, text='Bonjour tout le monde !', fg='red')
tex1.pack()
bou1 = Button(win, text='Quitter', command = win.destroy)
bou1.pack()
win.mainloop()

M. NAJOUI - ENSAM - Rabat 64

32
12/11/2021

Création des interfaces graphique : tkinter


Gestionnaires de positionnement : pack, place et grid.
Placer les widgets dans les fenêtres suivant les valeurs d’attributs :
side = [LEFT|RIGHT|TOP|BOTTOM] : Par defaut, cet attribut
est initialisé à top.
fill = [X|Y|BOTH|NONE] : NONE est la valeur par défaut.
expand = [TRUE|FALSE] : Permet au widget de s’étendre ou
pas lors d’un redimensionnement de la fenêtre parent (il est mis à
false par défaut).
padx = [0-9]+ : Espace de garde (nombre de pixel) à droite et à
gauche du widget
pady = [0-9]+ : Espace de garde au-dessus et en dessous du
widget
anchor = [N|NE|E|SE|S|SW|W|NW|CENTER] :
• S’elle est utilisée avec une commande de création : l'élément
interne au widget (texte ou graphique) sera collé à la partie
haute (nord => n) basse (sud => s) droite (est => e) ou gauche
(ouest => w) ou au centre (center).
• S’elle est utilisée avec pack : où sera placer le widget dans la
fenêtre.
ipadx = [0-9]+ : Ajouter le nombre de pixels spécifié à l'intérieur
du widget à droite et à gauche.
ipady=[0-9]+ : Ajouter le nombre de pixels spécifié à l'intérieur
du widget au dessus et en dessous. M. NAJOUI - ENSAM - Rabat 65

Création des interfaces graphique : tkinter


Gestionnaire de positionnement : pack().

Pack_info()
Retourne les valeurs des attributs d’un widget
print(b1.pack_info())

Pack_propagate(True|False)
Permet d’activer (True) ou desactiver (False) l’adaptation de la fenêtre pour ne tenir
que les widgets qui y sont placés. True est la valeur par defaut .
win.pack_propagate('false')

Pack_forget(widget_name)
Supprimer un widget d’une fenêtre.

M. NAJOUI - ENSAM - Rabat 66

33
12/11/2021

Création des interfaces graphique : tkinter


Gestionnaire de positionnement : pack(), place() & grid().

Créer le GUI suivant.


from tkinter import *
fen1 = Tk()
from tkinter import *
fen1.title("My_App")
fen1 = Tk()
txt1 = Label(fen1, text = 'Premier champ :')
fen1.title("My_App")
txt2 = Label(fen1, text = 'Second :')
txt1 = Label(fen1, text = 'Premier champ :')
entr1 = Entry(fen1)
txt2 = Label(fen1, text = 'Second :')
entr2 = Entry(fen1)
entr1 = Entry(fen1)
txt1.pack(side =LEFT)
entr2 = Entry(fen1)
txt2.pack(side =BOTTOM)
txt1.grid(row =0)
entr1.pack(side =RIGHT)
txt2.grid(row =1)
entr2.pack(side =BOTTOM)
entr1.grid(row =0, column =1)
fen1.mainloop()
entr2.grid(row =1, column =1)
from tkinter import * fen1.mainloop()
fen1 = Tk()
txt1 = Label(fen1, text = 'Premier champ :')
txt2 = Label(fen1, text = 'Second :')
entr1 = Entry(fen1)
entr2 = Entry(fen1)
txt1.place(x=0,y=0)
txt2.place(x=20, y=25)
entr1.place(x= 100, y=0)
entr2.place(x= 100, y=25)
fen1.title("My_App")
fen1.mainloop()
M. NAJOUI - ENSAM - Rabat 67

Création des interfaces graphique : tkinter

Les évènements :
Un clic sur un bouton de la souris
Le déplacement de la souris
L’appui sur une touche du clavier
Le relâchement d’une touche de clavier
La méthode mainloop() permet au tkinter d’attendre et d’être a l’écoute des évènements.
La méthode bind(event, callback) permet de lier l’évènement « event » au traitement souhaité
« callback ». Il y a aussi bind_all() et bind_class().
Syntaxe de l’évènement : "<modificateur-type-détail>"
Modificateur : double clique ou Alt-X, Ctrl-S…
Type : Button ou Key
Details : clique sur le bouton droit au gauche…
Les événements les plus souvent utilisés sont :
• KeyPress, Key : Enfoncer une touche
• KeyRelease : Relâcher une touche
• ButtonPress, Button : Enfoncer un bouton de la souris
• ButtonRelease : Relâcher un bouton de la souris.
• Motion : Mouvement du curseur dans la fenêtre •"<KeyPress-s>" : Touche S enfoncée
• Enter : La souris entre dans la fenêtre •"<Return>" : Touche Entrée enfoncée.
• Leave : La souris quitte la fenêtre •"<Button-1>" : Clic gauche de souris
• Map : La fenêtre est ouverte •"<Double-Button-1>" : Double clic gauche de souris
• Unmap : La fenêtre est réduite •"<Any-KeyPress>" : N’importe quelle touche est enfoncée
M. NAJOUI - ENSAM - Rabat 68

34
12/11/2021

Création des interfaces graphique : tkinter

Sont équivalents :
Les événements <KeyPress-x>, <Key-x>, <x> et x
Les événements <ButtonPress-1>, <Button-1> et <1>
Le callback est la fonction qui sera appelée par tkinter lorsque l’événement se produit. Cette
fonction doit accepter un argument, qui sera un objet event.
L’objet event permet à tkinter de nous donner des informations sur l’événement qui a été
déclenché via des attributs comme :
widget : c’est l’instance du widget qui a déclenché cet événement.
x, y : la position de la souris par rapport à la fenêtre
x_root, y_root : la position de la souris par rapport à l’écran
char : le caractère (seulement pour un événement clavier) sous forme de chaîne de caractères
keysym : la représentation du caractère (seulement pour un événement clavier)
keycode : un code unique pour une touche du clavier
num : le numéro du bouton (seulement pour un événement souris).
type : le type de l’événement, représenté par un nombre.
import tkinter as tk
def on_double_click(event):
print("Position de la souris:", event.x, event.y)
def keyb_click(ev):
print("you have clicked on : ", ev.char)
app = tk.Tk()
app.bind("<Double-Button-1>", on_double_click)
app.bind("<Enter>", on_double_click)
app.bind("<Leave>", on_double_click)
app.bind("<Any-Key>", keyb_click)
app.mainloop()

M. NAJOUI - ENSAM - Rabat 69

Création des interfaces graphique : tkinter

from tkinter import *


def hello(event):
print("Single Click, Button-", event.num, event.type)
def quit(event):
print("Double Click, so let's stop")
import sys; sys.exit()
b = Button(None, text='Mouse Clicks')
b.pack()
b.bind('<Button-1>', hello)
b.bind('<Double-1>', quit)
b.mainloop()

from tkinter import *


def motion(event):
print("Mouse position: (%s %s)" % (event.x, event.y))
return
master = Tk()
ms = "This is a message"
msg = Message(master, text = ms)
msg.config(bg='lightgreen', font=('times', 24, 'italic'))
msg.bind('<Motion>',motion)
msg.pack()
master.pack_propagate(False)
mainloop()

M. NAJOUI - ENSAM - Rabat 70

35
12/11/2021

Création des interfaces graphique : tkinter


Exercice :
from tkinter import *
from random import randrange
# --- definition des fonctions gestionnaires d'evenements : ---
def drawline():
"Trace d'une ligne dans le canevas can1"
global x1, y1, x2, y2, color
can1.create_line(x1,y1,x2,y2,width=2,fill=color)
# modification des coordonnees pour la ligne suivante :
y2, y1 = y2+10, y1-10
def changecolor():
"Changement aleatoire de la couleur du trace"
global color
pal=['purple','cyan','maroon','green','red','blue','orange','yellow']
c = randrange(8) # => genere un nombre aleatoire de 0 aa 7
color = pal[c]
#------ Programme principal -------
# les variables suivantes seront utilisees de maniere globale :
x1, y1, x2, y2 = 10, 190, 190, 10 # coordonnees de la ligne
color = 'dark green' # couleur de la ligne
# Creation du widget principal ("maitre") :
win = Tk()
# creation des widgets "esclaves" :
can1 = Canvas(win,bg='dark grey',height=200,width=200)
can1.pack(side=LEFT) Question1 : Modifier ce programme afin
b1 = Button(win,text='Quitter',command=win.quit)
b1.pack(side=BOTTOM) de tracer des lignes horizontales paralleles.
b2 = Button(win,text='Tracer une ligne',command=drawline)
b2.pack()
b3 = Button(win,text='Autre couleur',command=changecolor)
Question2 : Modifier ce programme afin
b3.pack() de tracer des lignes verticales paralleles.
win.mainloop()

M. NAJOUI - ENSAM - Rabat 71

Création des interfaces graphique : tkinter

Calculatrice simple :
from tkinter import *
def evaluer(v):
global xx
lab.configure(text = "Resultat = " + str(eval(e1.get())))
e1.config(bg = 'yellow')
xx.set("The result is = "+str(eval(e1.get())))
l1.config(bg = 'lightgreen')
win = Tk()
win.title("Calcularice")
win.pack_propagate(False)
e1 = Entry(win)
lab = Label(win, bg='cyan')
e1.pack()
lab.pack()
xx = StringVar() # To control the text displayed in a Label
l1 = Label(win, bg = 'white', textvariable = xx)
l1.pack()
e1.bind("<Return>", evaluer)
win.mainloop()

Détection et positionnement d'un clic de souris dans une fenêtre :


from tkinter import *
def pointeur(event):
lab1.configure(text = "Click detected on X =" + str(event.x) +\
", Y =" + str(event.y))
fen = Tk()
cadre = Frame(fen, width =200, height =150, bg="light yellow")
cadre.bind("<Button-1>", pointeur)
cadre.pack()
lab1 = Label(fen, bg='light green')
lab1.pack()
fen.mainloop()
M. NAJOUI - ENSAM - Rabat 72

36
12/11/2021

https://www.tutorialspoint.com/python/python_variable_types.htm
https://www.tutorialspoint.com/python_programming_examples/
https://python.doctor/page-apprendre-listes-list-tableaux-tableaux-liste-array-python-
cours-debutant
https://docs.python.org/3.6/tutorial/index.html
https://docs.python.org/2/library/tkinter.html
http://tkinter.fdex.eu/doc/intro.html
https://github.com/GravenilvecTV/little-cookieui-example
https://gist.github.com/GravenilvecTV/2240add5bfb3d3fa53f9f98057cad63c
https://htmlcolorcodes.com/fr/
https://www.youtube.com/watch?v=N4M4W7JPOL4&feature=youtu.be

M. NAJOUI - ENSAM - Rabat 73

37

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy