Python EEIN Najoui 21-22
Python EEIN Najoui 21-22
Python EEIN Najoui 21-22
Initiation a la programmation
Python
Pr. M. NAJOUI
m.najoui@um5s.net.ma
Introduction
Pourquoi ce cours ?
1
12/11/2021
Introduction
Python ? Caractéristiques?
Introduction
Compilation :
2
12/11/2021
Introduction
Sublime Text
Atom
Eclipse
…..
M. NAJOUI - ENSAM - Rabat 5
Installation et Configuration
3
12/11/2021
Installation et Configuration
Installation et Configuration
4
12/11/2021
Installation et Configuration
Installation et Configuration
5
12/11/2021
Installation et Configuration
Installation et Configuration
6
12/11/2021
Installation et Configuration
Installation et Configuration
7
12/11/2021
Installation et Configuration
Installation et Configuration
8
12/11/2021
Installation et Configuration
Installation et Configuration
9
12/11/2021
Installation et Configuration
Généralités
Les commentaires
’’’ Ceci est un commentaire ecrit
sur plusieurs lignes ’’’
# Autre maniere de commenter une ligne.
10
12/11/2021
Généralités
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)
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
Généralités
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
Généralités
print("my name is %s, I'm %d years old and my height is %f m" %('Mohamed', 20, 1.8))
13
12/11/2021
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
14
12/11/2021
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
15
12/11/2021
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 ?
16
12/11/2021
dic = {}
print(dic.fromkeys((2,3,4), 'val'))
17
12/11/2021
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')
18
12/11/2021
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')
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)
19
12/11/2021
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)))
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
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
# 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)
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
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
21
12/11/2021
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.
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.
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.
title() : Returns "titlecased" version of string, that is, all words begin with uppercase and the rest are lowercase.
isdecimal() : Returns true if a unicode string contains only decimal characters and false otherwise.
22
12/11/2021
1 Month 1 to 12
2 Day 1 to 31
3 Hour 0 to 23
4 Minute 0 to 59
import calendar
cal = calendar.month(2020, 12)
print ("Here is the calendar:")
print (cal)
23
12/11/2021
Les fichiers
Les fichiers
The os Python module provides a big range of useful methods to manipulate files and
directories.
24
12/11/2021
25
12/11/2021
26
12/11/2021
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)
27
12/11/2021
Le module « numpy »
28
12/11/2021
Le module « matplotlib »
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
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.
Exercices
import glob
x = glob.glob('*.xlsx')
print(x)
30
12/11/2021
31
12/11/2021
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())
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'))
32
12/11/2021
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.
33
12/11/2021
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
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()
35
12/11/2021
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()
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
37