Vous êtes sur la page 1sur 57

Le langage python

Mohamed Bouraoui

bourawi.mohamed@gmail.com

AU 2017 - 2018
1
Installation de l’environnement de
développement
• Pour vérifier s’il existe un version python déjà installée :

$ python --version

• Dans le cas échéant:


• Télécharger la dernière version python compatible avec votre système
d’exploitation à partie de:
https://www.python.org/downloads/
• Sous Linux:
• Télécharger le code source et faire un build ou utiliser l’utilitaire APT
• Sous Windows :
• S’assurer des choix:
• Add python 3.5 to PATH
• Add Python to environment variables
2
Installation de l’environnement de
développement (2)
• Références
https://docs.python.org/3/using/windows.html#excursus-setting-environment-variables

• Et c’est parti!

3
Installation de l’environnement de
développement (3)
• L’interpréteur interactif

• Utiliser l’IDE (Python IDLE)

4
Opérateurs arithmétiques
• Les opérateurs arithmétiques en Python sont:
• + Pour l’addition
• - Pour la soustraction
• * Pour la multiplication
• / Pour la division

• L’usage des parenthèses est important!

• ** est utilisé pour la puissance


• % opérateur « modulo »
• // est l’opérateur « div » 5
A votre IDE !

# Ecrire ce code pour tester et puis écrire vos propres expressions


print(2 + 1)
print(1 + 2 + 3 * 4)
print((1 + 2 + 3) * 4)
print(2**2)
print(9 % 2)

6
Types entier et réel
• Un autre type arithmétique existe en
python c’est le type « float »

• Une opération entre float et entier


retourne un float

• Un float contient un « . »

7
Les variables
• Pour Créer une variable en Python, il suffit d’utiliser l’opérateur
d’affecation « = »

• Il est possible de définir des opérations sur une variable ainsi:

• Incrémentation
• Décrémentation
• Multiplication
• Division
8
Application
# Valeur du volume courant d'eau dans le barrage du Bir Mcherga
reservoir_volume = 4.445e8
# Le quantité de pluie
precipitation = 5e6

# Décrémenter par 50% la quantité de la pluie

# Ajouter le nouveau volume d'eau au barrage

# Décrémenter par 5% le volume d'eau du barrage à cause de l'évaporation

# afficher la nouvelle valeur du volume d'eau

9
Les variables (2)
• Affectations multiples

• Conversion de types

10
Opérateurs de comparaison
• Il est possible d’utiliser des variables de type Booléen ( bool )

• On obtient un résultat de type booléen lors d’une opération de comparaison

• Les opérateurs de comparaison sont:


Inférieur < Supérieur >=
strictement
Supérieur > Egale ==
strictement
11
Inférieur <= Différent !=
Application
>>tomate_marche_x, pommes_de_terre_marche_x = 920, 870
>>tomate_marche_y, pommes_de_terre_marche_y = 890, 890

#Ecrire Le code permettant d'afficher "True" si l'achat des légumes du


#marche_x est une bonne affaire et "False" sinon

12
Les chaînes de caractères
• Le type string en python permet de manipuler les chaînes de caractères.

• L’opérateur + permet de concaténer deux chaînes de caractères

13
Les chaînes de caractères (2)
• Une méthode prédéfinie len permet de retourner la longueur d’une chaîne
de caractères

• Application:

Pour deux chaînes de caractères que vous saisissez appelées part1 et part2, écrire
le script permettant de retourner:
• True Si leur concaténation (Espace comme séparateur) est valide comme « Tweet »
• False Sinon
• Notes:
• Une Tweet ne dépasse pas 140 caractères
• La fonction input() permet d’enter des caractères
14
Types et conversion
• On vient d’utiliser des variables de types int, float, bool et str.
• On peut vérifier le type d’une variable par l’usage de la méthode type

• Il est possible de passer d’un type vers un autre, exemples:

15
Application
#Déclarer les variables suivantes

depenses_lundi = "30"
depenses_mardi = "65"
depenses_jeudi = "12"
depenses_vendredi = "45"
depenses_dimande = "20"

#Ecrire un programme qui affiche: « Durant cette semaine vous avez dépensé
#X dinars »

16
String : autres méthodes
• Il existe plusieurs méthodes
permettant de gérer les chaînes de
caractères, on cite:
• title, islower, count…

• Vous pouvez consulter la


documentation sur:

https://docs.python.org/3/library/stdtyp
es.html#string-methods

17
Application
• Consultez la documentation et gérez vos chaînes de caractères!

18
Le formatage des chaînes
• Une méthode particulièrement utile est .format.
• Elle permet de construire des chaînes de caractères tout en suivant
des « templates ».
• Exemple:

log_server_access = "IP address {} accessed {} at {}".format(user_ip, url, now)

19
Application
#Déclarer les variables suivantes
city = "Tunis"
temperature_max = 37
temperature_min = 12
unit_temp = "degrees Celsius"

notif = "Les prévisions pour aujourd\'hui pour" + city + ": Température entre " +
str(temperature_min) + " et " + str(temperature_max) + " " + temperature_unit + ".

#Simplifier cette chaîne de caractères en utilisant le formatage

20
Définir des fonctions
• On définit une fonction via le mot clé def.
• Exemple: une fonction pour le calcul du volume d’un cylindre

• Une fois la fonction est définit, on peut l’appeler ainsi:


>>>cylinder_volume(4,3)
• Une fonction peut ne pas avoir une valeur de retour. La valeur de
retour dans ce cas est None.
21
Définir des fonctions (2) : La documentation
• La documentation est le texte précédé par """
def cylinder_volume(height, radius):
"""
Calcule le volume d'un cylindre
height: flaot. Hauteur du cylindre
radius: float. Rayon du cylindre
"""
pi = 3.14159
return height * pi * radius ** 2

• Référence sur les standards de définition des documentations en


python: https://www.python.org/dev/peps/pep-0257/
22
Application
• Définir une fonction jours_semaine permettant de retourner pour
une valeur de jours donné une chaîne de caractères indiquant le
nombre de semaines et les jours restant.

23
Les arguments par défaut
• Il est possible de définir un fonction avec un argument par défaut.
Exemple:
def cylinder_volume(height, radius, unité = "m3"):
"""
Affiche le volume d’un cylindre
L’unité de mesure par défaut est m3
"""

24
Structures conditionnelles
if poids_en_kg < 25:
print("votre valise est acceptée")

• On utilise le mot clé if suivit par la condition et par :


• Les instructions dans le bloc « if » sont précédées par une
tabulations.
• Attention aux indentations dans vos scripts!
if number % 2 == 0:
print("Le numéro " + str(number) + " est pair.")
else:
print("Le numéro " + str(number) + " est impair.") 25
Structures conditionnelles (2)
if poids_en_kg < 25:
print("votre valise est acceptée")
elif poids >= 25 and poids < 40
print("Acceptée avec des frais")
else:
print("refusée" )

• On utilise les opérateurs booléen and, or et not pour composer les


conditions.

26
Application
• Implémenter la fonction cylinder_surface avec la signature suivante

def cylinder_surface(height, radius, hasTopAndBottom):


"""
Si le troisième paramètre est vrai alors on doit aussi calculer
les surfaces des parties supérieure et inférieure
"""
• Modifier la fonction pour que la valeur par défaut de l’argument
hasTopAndBottom soit True

27
Les listes
• Une collection de données peut être représentée en plusieurs
structures. Pour une suite ordonnée de valeur, on utilise Les listes.
Jours_semaine = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "samedi" , "dimanche"]

• Accès au éléments d’une liste


>>> print(Jours_semaine[2])
Mercredi

>>> debut_semaine=Jours_semaine[0:3] • Il est possible partitionner


>>> print(debut_semaine) une liste en utilisant
['Lundi', 'Mardi', 'Mercredi'] l’opérateur :
28
« Mutable » vs « Non Mutables »
>>> dsen_groupes = ['dsen51', 'dsen52']
>>> dsen_groupes_str = 'dsen51 dsen52'
>>> dsen_groupes[1] • Une chaîne de caractères peut
'dsen52'
>>> dsen_groupes_str[5] être gérée comme étant une
'1' liste de caractères mais sans
>>> dsen_groupes[1] = 'dsen53' oublier qu’une chaîne de
>>> dsen_groupes_str[5] = '3' caractères n’est pas mutable
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
dsen_groupes_str[5] = '3'
TypeError: 'str' object does not support item
assignment

29
Les listes (2)
• Plusieurs fonctions nous permettent de manipuler les listes

>>> liste_notes = [11, 12.5, 16,9, 17]


>>> len(liste_notes)
5
>>> max(liste_notes)
17
>>> min(liste_notes)
9
>>> sorted(liste_notes)
[9, 11, 12.5, 16, 17]
>>> sorted(liste_notes, reverse= True)
[17, 16, 12.5, 11, 9] 30
Les listes (3)
• La méthode join permet de retourner une chaîne de caractères contenant
les éléments de la liste de chaînes ainsi que la caractère de jointure.

>>> liste_notes=["11","12.5","16","9","17"]
>>> "-".join(liste_notes)
'11-12.5-16-9-17'

• Pour ajouter un élément à une liste, on utilise la méthode append.

>>> liste_notes.append("19")
>>> print(liste_notes)
['11', '12.5', '16', '9', '17', '19']

• Plus de méthodes pour la manipulation des listes:


https://docs.python.org/3/tutorial/datastructures.html 31
Parcourir une liste
• Soit la liste suivante:

jours_semaine = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "samedi" , "dimanche"]

• Pour la parcourir, on utilise une boucle ainsi:

for jour in jours_semaine:


print(jour)
for index,jour in enumerate(jours_semaine):
print(index,jour) 32
Application: Calculer les tags XML
• Ecrire une fonction « tag_counter » permettant de calculer le nombre
des tags XML dans une liste.
• Exemple:

>>> liste = ['<etudiant>', 'Ahmed Ben Amine', '</etudiant>']


>>> print(tag_counter(liste))
2

33
Application2: Construire une liste
• Définir une fonction « html_liste » qui permet de convertir une liste
de valeurs en une liste HTML.
• Exemple: >>> list_to_html = ['first string', 'second string']

>>> html_list(list_to_html)

<ul>
<li>first string</li>
<li>second string</li>
</ul>

• Indication: Pensez à utiliser la fonction range. 34


Appication3
• Définir la fonction affiche_liste dont les paramètres sont les suivants:
• L : liste des valeurs
• Numéroté: de type Booléen, False par défaut.

Exemple:
liste_menu_du_jours = [‘Spaghetti’, ‘Salade César’, ‘Escalope panné’]

affiche_liste(liste_menu_du_jours , True) affiche_liste(liste_menu_du_jours )


1. Spaghetti - Spaghetti
2. Salade Cesar - Salade César
3. Escalope panné - Escalope panné
35
Les boucles « while »
• Dans le cas ou le nombre d’itérations est inconnu, on peut avoir
recours à la boucle while.
• Exemple:
>>> bonus_jeu = [1,3,5,7]
>>> score = []
>>> while sum(score) < 10:
score.append(bonus_jeu.pop())
>>> print(score)
[7, 5]

• pop: Dépile le dernier élément d’une liste


• On quitte une boucle « while » par le mot clé break. 36
La collection « Set »
• Une autre structure de données en python qui permet d’avoir des
éléments non-dupliqués est la structure « set ».
• On peut créer une set:
• A partir d’une liste: my_set = set(ma_liste)
• Vide: my_empty_set = set()
• On peut ajouter un élément dans une « set » par le mot clé add.

37
Les dictionnaires
• Les dictionnaires sont une structure de données qui sauvegardent une paire
de données de la formé clé  valeur.
• Exemple: elements = {'hydrogen': 1, 'helium': 2, 'carbon': 6}

>>> print(elements['carbon'])
• Pour accéder à un élément: 6

• Pour ajouter un nouvel élément: >>> elements['lithium'] = 3

Une autre manière pour accéder à un élément est l’usage de la méthode get
>>> print(elements.get(‘carbon’))
6 38
Application
• On souhaite connaitre le nombre d’utilisateurs de notre site par pays.
On détient uniquement d’une liste contenant les pays des visiteurs.
• Ecrire un script permettant de:
• Créer un dictionnaire pays_count de la forme {pays, nombre de
visiteurs}
• Ecrire le script dans un fichier stats.py
• Afficher le résultat

• Télécharger le fichier python:


https://github.com/bouraouimed/samples-python
• Dans stats.py, vous importez la liste « country_list » en ajoutant:
from countries import country_list 39
Suite
• Utiliser une boucle « for » pour afficher un message de la forme:

Les visiteurs du pays X ont accédé Y fois.

• Ecrire un script qui retourne les clé(s) relatives à une valeurs donnée.
• Exemple:
• d = {'m': 1, 'n': 2, 'e': 4, 't': 1, 'v': 1}
• get_keys(d,1) retourne ['m', 't', 'v']

40
Les structures composites
• Selon notre besoin de représentation des données, il est possible de
construire des structures composites de données.
• Exemple, soit le dictionnaire suivant:
elements = {'hydrogen': {'number': 1, 'weight': 1.00794, 'symbol': 'H'},
'helium': {'number': 2, 'weight': 4.002602, 'symbol': 'He'}}
• Il est possible d’accéder aux données ainsi:
>>> print(elements.get('hydrogen'))
{'number': 1, 'weight': 1.00794, 'symbol': 'H'}
>>> print(elements.get('hydrogen').get('weight'))
1.00794
>>> print(elements['hydrogen']['weight'])
1.00794 41
Application
• Définir une fonction calcul_annuel qui permet de calculer les revenus
annuel.
• Les données sont représentés ainsi:
revenus_mensuels = {'Janvier': [54, 63], 'Février': [64, 60], 'Mars': [63, 49],
'Avril': [57, 42], 'Mai': [55, 37], 'Juin': [34, 32],
'Juillet': [69, 41, 32], 'Aout': [40, 61, 40], 'Septembre': [51, 62],
'Octobre': [34, 58, 45], 'Novembre': [67, 44], 'Décembre': [41, 58]}

• Ecrire un script qui retourne les clé(s) associées à chaque valeur


• d = {'m': 1, 'n': 2, 'e': 4, 't': 1, 'v': 1}
• get_keys(d) retourne {1: ['m', 't', 'v'], 2: ['n'], 4: ['e']}

42
Les « tuples »
• Il est parfois utile de sauvegardé un ensemble corrélé de données.
• Exemple latitude_longitude = (10.3271, 11.5473)
>>> latitude_longitude[0]
10.3271
>>> latitude_longitude[1]
11.5473
>>>

• Un « tuple » peut avoir n dimensions.


• Une fonction peut retourner un tuple de valeurs.
43
LA MANIPULATION DES FICHIERS
• Il est utile parfois de récupérer des données à partir des fichiers.
Python offre les fonctions nécessaires pour le faire.
• Ouvrir un fichier en mode lecture f = open('/my_path/my_file.txt','r')

• Lire à partir du fichier file_data = f.read()


f.close()
• Ecrire dans un fichier f.write("Hello World!")

• Pour fermer systématiquement après une opération, on utilise with


with open('/my_path/my_file.txt','r') as f:
file_data = f.read()
44
Documentation: https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files
Application

• Refaites l’exemple « pays_count » en écrivant le résultat dans un


fichier « stats_res.txt » ayant le format suivant:

45
La bibliothèque standard
• Python offre une bibliothèque standard « Python Standard Library » qui inclut
un ensemble de bibliothèques souvent utiles.
• Importer un module est via le mot clé import. Exemple: import math
print(math.factorial(3))

• En parcourant la bibliothèque standard (https://docs.python.org/3/library/),


on trouve:
• csv: Lire et écrire à partir des fichiers CSV
• Collections: Extension des structures de données prédéfinies.
• random: Génération de nombres aléatoires
• re: Manipulation des expressions régulières
• math: Les opérations mathématiques
• os: Intéragir avec le système d’exploitation
• os.path: Un sous module de os pour la manipulation des chemins.
• json: Lire et écrire à partir des fichiers JSON
46
Utiliser des modules
• On peut importer une classe à partir d’une librairie ainsi:
from collections import defaultdict
• De même pour des importations multiples
from collections import defaultdict, namedtuple
• Pour renommer un module importé: utiliser le mot clé as
from csv import reader as csvreader
• A éviter
from module_name import *

47
Application
• En utilisant la librairie « os » , écrire un script permettant d’afficher
les documents dans le répertoire courant.
• Ecrire un script permettant de renommer tous les fichiers dont
l’extension est « txt ».
• En utilisant la librairie collections, réécrire le script « pays_count »

48
Des modules « Tierce-partie »
• Mise à part la bibliothèque standard pour python, il existe des
bibliothèques dites « Third Party ».
Pour Parcourir: https://readthedocs.org
• Une sélection:
• requests – Un Outil d'accès à des Web APIs.
• Flask - Un Framework pour le Web "lightweight".
• Django - Un Framework le Web plus complet.
• NumPy - Pour l'algèbre linéaire.
• pandas - Bibliothèque à outils d'analyse de données
• matplotlib - Graphes 2D.
• Pillow - Traitement d'images.
• pyglet - Développement de jeux. 49
Les « prérequis » d’une librairie
• Une librairie tierces partie détient fréquemment des dépendances.
Ces dépendances sont généralement décrites dans un fichier
requirements.txt.
• Exemple: bs4==0.0.1
pytz==2016.7
requests==2.11.1
• Pour installer une librairie avec ses prérequis, on utilise

pip3 install -r requirements.txt

50
Environnement de développement: virualenv
• « Virtualenv »: Comme solution aux problèmes d’incompatibilité entres
des versions de librairies dans différents projets, python utilise les
environnements virtuels ou « virtualenv ».
• Installer: pip install virtualenv
• Créer: virtualenv <NOM_DE_VOTRE_ENV_V>
• Activer:
• Linux: source bin/activate
• Windows: Scripts\Activate

• Désactiver:
• La commande est: deactivate

51
Référence: https://virtualenv.pypa.io/en/stable/userguide/
Application
• Consultez les deux librairies suivantes:
• Requests
• http://docs.python-requests.org/en/master/
• BeautifulSoup
• https://www.crummy.com/software/BeautifulSoup/bs4/doc/
• Créer un virtualEnv « CrawlerEnv » intégrant les deux librairies
• On souhaite extraire les données de l’annuaire du « El Ghazela
Technopark » pour avoir toutes les données sur les entreprise au
pôle. Lien: http://www.elgazala.tn/annuaire/elgazala
• A vos IDE!
52
POO : Les classes
Geo.py • Rectangle représente le nom de la
classe.
• largeur et longueur sont les
attributs de la classe.
• __init__(self, largeur, longueur)
est le constructeur de la classe.
Test_class.py
• Rect = Rectangle(5,7) est l’instanciation
d’un objet de type Rectangle
• On accède à un attribut via
nom_objet.nom_attribut

Google Style Guide for Python: https://google.github.io/styleguide/pyguide.html 53


POO : Les classes (2)

• Qu’est-ce qu’il y’a derrière?


1. __init__ est appelée
rect = Rectangle(5,7) 2. self pointe sur l’objet rect
print(rect.largeur) 3. largeur 5
4. longueur 7
• Un objet en mémoire est crée avec les attributs
largeur et longueur qui sont des attributs
d’instance

54
Les variables de classe
• UNITS est une variable de
classe
• On accède une variable de
classe via:
NomClasse.NOMVARIABLE

55
Les variables prédéfinies

• On définit la documentation avec


"""
• On peut accéder à la
documentation de la classe en
utilisant la variable prédéfinie
__doc__
• Il existe d’autre méthodes
prédéfinies en python ( __dict__ ,
__name__ , __module__ )

Méthodes prédéfinies: https://docs.python.org/2/reference/datamodel.html 56


Les méthodes prédéfinies
• Python détient des méthodes prédéfinies pour la manipulation des classes,
exemples:
• __getattr__ : Accéder à un attribut par son nom
• __setattr__ : Modifier la valeur d’un attribut
• __str__ : Retourne une représentation de l’objet sous forme de chaîne de caractères
• __del__: Supprimer une instance
• …
• Il est possible de surcharger l‘opérateur en définissant une méthode
__add__

https://docs.python.org/3/reference/datamodel.html#specialnames 57

Vous aimerez peut-être aussi