SlideShare une entreprise Scribd logo
IN20 Informatique
Séance 2
Tuple et objet
Sébastien Combéfis, Quentin Lurkin lundi 21 septembre 2015
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
Rappels
Ensemble
Collection non ordonnée d’éléments distincts
Opérations ensemblistes
Modification et ensemble non modifiable
Dictionnaire
Ensemble de paires clé-valeur, avec clés distinctes
Opérations d’accès et de modification
Base de données et format JSON
3
Objectifs
Utilisation de tuples
Définition et utilisation
Fonction avec plusieurs valeurs de retour
Tuple nommé
Introduction aux objets
Création et utilisation d’objets
Appel de méthode
Programmation orientée objet
4
Tuple
Tuple
Séquence ordonnée et non modifiable d’éléments
Les éléments d’un tuple ne peuvent pas être modifiés
Définition d’un tuple avec ()
Parenthèses pas obligatoires lorsqu’au moins un élément
1 # Tuple vide
2 a = ()
3
4 # Tuples contenant un seul élément
5 b = 1,
6 c = (1,)
7
8 # Tuples contenant trois éléments
9 d = 1, 2, 3
10 e = (1, 2, 3)
6
Somme des éléments d’un tuple
Accès aux éléments d’un tuple avec les crochets
En lecture seulement, l’accès en écriture est interdit
Taille d’un tuple obtenue avec la fonction len
Parcours d’un tuple avec while ou for
1 def sum(values): | def sum(values):
2 s = 0 | s = 0
3 i = 0 | for element in values:
4 while i < len(values): | s += element
5 s += values[i] | return s
6 i += 1 |
7 return s |
7
Définition avec parenthèses
Définition avec parenthèses d’un tuple parfois obligatoire
Pour le tuple vide
Lors d’un appel de fonction
1 result = sum(1, 2, 3)
2
3 # Solution correcte :
4 # result = sum ((1, 2, 3))
Traceback (most recent call last):
File "program.py", line 9, in
r = sum(1, 2, 3)
TypeError: sum() takes 1 positional argument but 3 were given
8
Emballage et déballage
On peut emballer plusieurs valeurs dans un tuple
Elles sont toutes accessibles à partir d’une seule variable
On peut déballer un tuple dans plusieurs variables
Chaque variable reçoit la valeur d’un élément du tuple
1 t = 1, 2, 3
2 print(t)
3
4 a, b, c = t
5 print(a, b, c, sep=’/’)
(1, 2, 3)
1/2/3
9
Plusieurs valeurs de retour
Une fonction peut renvoyer plusieurs valeurs
Il suffit en fait de renvoyer un tuple
Fonction qui cherche un élément dans une liste
Si l’élément est trouvé, renvoie True et son indice
Sinon renvoie False et None comme indice
1 def find(list , element):
2 i = 0
3 while i < len(list):
4 if list[i] == element: # L’élément est trouvé
5 return True , i
6 i += 1
7 return False , None # L’élément n’a pas été trouvé
10
Récupération des valeurs de retour
Deux solutions pour récupérer les valeurs de retour
Sous forme d’une variable contenant un tuple
Avec autant de variables qu’il y a d’éléments dans le tuple
1 values = [1, 2, 3, 4]
2
3 result = find(values , 2)
4 found , index = find(values , 6)
5
6 print(result , found , index)
(True , 1) False None
11
Absence de valeur
La valeur spéciale None représente l’absence de valeur
A permis d’avoir des valeurs de retour homogènes pour find
1 def find(list , element):
2 i = 0
3 while i < len(list):
4 if list[i] == element: # L’élément est trouvé
5 return True , i
6 i += 1
7 return False # L’élément n’a pas été trouvé
8
9 values = [1, 2, 3, 4]
10 result = find(values , 2) # result peut être
11 # de différents type
12 if type(result) is tuple:
13 print(result [0], result [1])
14 else:
15 print(result)
12
Opérateur de déballage
Deux manières de déballer un tuple
Avec l’opérateur d’affectation
Lors d’un appel de fonction
Opérateur de déballage (*) lors d’un appel de fonction
Déballe le tuple dans les paramètres de la fonction appelée
1 def max(a, b, c):
2 if a > b and a > c:
3 return a
4 elif b > c:
5 return b
6 return c
7
8 t = 1, 2, 3
9 result = max (*t)
13
Affectation multiple
Changer la valeur de plusieurs variables en une fois
Combinaison d’emballage puis de déballage
Permet d’échanger les valeurs de deux variables
En une seule opération, sans variable intermédiaire
1 x, y = "Hello", 42
2 print(x, y)
3
4 x, y = y, x
5 print(x, y)
Hello 42
42 Hello
14
Tuple nommé
Attribuer un nom à chacun des éléments d’un tuple
Et permettre d’accéder aux éléments à partir du nom
Création d’un tuple nommé en deux phases
Définition d’un nouveau type de tuple nommé
Création du tuple nommé
1 from collections import namedtuple
2
3 Item = namedtuple (’Item ’, [’barcode ’, ’description ’, ’price ’])
4
5 coca = Item (5449000000996 , "Coca -Cola 33cl", 0.70)
15
Accès aux champs
Accès aux champs avec l’opérateur d’accès (.)
Un tuple nommé est un tuple enrichi
coca
0
barcode
1
description
2
price
5449000000996 "Coca-Cola 33cl" 0.7
1 print(len(coca)) # 3
2 print(coca [1]) # Coca -Cola 33cl
3 print(coca [1:3]) # (’Coca -Cola 33cl ’, 0.7)
4
5 print(coca.price) # 0.7
16
Vecteur dans le plan (1)
Définitions de fonctions qui agissent sur un vecteur
Représentation textuelle et calcul de la norme
1 from math import sqrt
2 from collections import namedtuple
3
4 Vector = namedtuple (’Vector ’, [’x’, ’y’])
5
6 def vectostr(v):
7 return "(" + str(v.x) + ", " + str(v.y) + ")"
8
9 def norm(v):
10 return sqrt(v.x ** 2 + v.y ** 2)
11
12 u = Vector (1, 1)
13 print(vectostr(u))
14 print(norm(u))
17
Tuple nommé vs dictionnaire
Éléments d’un tuple nommé ordonnés car séquence
Un dictionnaire est un ensemble de paires clé-valeur
Tuple nommé non modifiable
On peut modifier et ajouter des valeurs à un dictionnaire
Champs d’un tuple nommé sont des chaines de caractères
Les clés d’un dictionnaire sont des valeurs non modifiables
18
Objet
Objet (1)
Un objet combine des données et des fonctions
Les fonctions ont accès complet aux données de l’objet
Permet de définir des types de données complexes
On a déjà renconté les listes, chaines de caractères, ensembles...
1 dice = {1, 2, 3, 4, 5, 6} # Initialisation des données
2 face = dice.pop () # Appel d’une fonction
3
4 print("La face visible du dé est :", face)
La face visible du dé est : 1
20
Objet (2)
Trois éléments existent lorsqu’on crée un objet
L’objet, avec ses attributs, se trouve en mémoire
Une variable du même type que l’objet est déclarée
Une référence vers l’objet est stockée dans la variable
1 dice = {1, 2, 3, 4, 5, 6}
dice
set
set
1
2
3
4
5
6
21
Création
Création d’un objet en exécutant un constructeur
Permet d’initialiser les attributs de l’objet
1 from datetime import time
2
3 start = time (14, 45, 21)
4 end = time (16, 15, 56)
start
time
time
hour : 14
minute : 45
second : 21
end
time
time
hour : 16
minute : 15
second : 56
22
Des objets partout...
Person
Food
TransportationMean
23
Accès aux attributs
Accès aux attributs d’un objet avec l’opérateur d’accès
Exactement comme avec les tuples nommés
L’accès peut se faire en lecture et/ou écriture
Certains attributs sont protégés en lecture seule
1 startseconds = 3600 * start.hour + 60 * start.minute + start.second
2 endseconds = 3600 * end.hour + 60 * end.minute + end.second
3
4 difference = endseconds - startseconds
5 print("Le cours va durer :", difference , "secondes")
24
Paramètre de type objet
Une fonction peut recevoir des paramètres de type objet
Le paramètre reçoit une copie de la référence vers l’objet
1 from datetime import time
2
3 def toseconds(t):
4 return 3600 * t.hour + 60 * t.minute + t.second
5
6
7 start = time (14, 45, 21)
8 end = time (16, 15, 56)
9
10 difference = toseconds(end) - toseconds(start)
11 print("Le cours va durer :", difference , "secondes")
Le cours va durer : 5435 secondes
25
Valeur de retour de type objet
Une fonction peut renvoyer un objet
La fonction crée l’objet et renvoie une référence vers ce dernier
1 from datetime import time
2
3 def theoreticalend (start , duration):
4 minute = start.minute + (duration % 60)
5 hour = start.hour + (duration // 60) + (minute // 60)
6 return time(hour , minute % 60, start.second)
7
8
9 start = time (14, 45, 21)
10 print("Le cours devrait finir à :", theoreticalend (start , 90))
Le cours devrait finir à : 16:15:21
26
Appel de méthode (1)
Une fonction associée à un objet est appelée une méthode
Une méthode est appelée sur un objet cible
1 from calendar import TextCalendar
2
3 cal = TextCalendar ()
4 cal.prmonth (2015 , 9) # Affiche le calendrier de septembre 2015
September 2015
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
27
Appel de méthode (2)
Méthode appelée avec l’opérateur d’appel de méthode (.)
L’objet cible est précisé avant le point
1 from calendar import TextCalendar
2
3 cal = TextCalendar ()
4 cal. setfirstweekday (6) # Change le premier jour de la semaine
5 cal.prmonth (2015 , 9)
September 2015
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
28
Vecteur dans le plan (2)
Méthode appelée directement sur l’objet cible
On ne doit plus passer le vecteur en paramètre
fonction(tuple_nommé, paramètres) objet.methode(paramètres)
1 # u = Vector (1, 1)
2 # print(vectostr(u))
3 # print(norm(u))
4
5 u = Vector (1, 1)
6 print(u)
7 print(u.norm ())
29
Objet vs tuple nommé
Modification possible des attributs d’un objet (directe ou non)
Un tuple nommé est non modifiable
Fonctions associées aux objets, appelées méthodes
Fonction utilisant un tuple nommé doit le recevoir en paramètre
Accès aux attributs peut être restreint aux méthodes
Tous les champs d’un tuple sont toujours accessibles
30
Programmation orientée objet
La programmation orientée objet manipule des objets
Concepts et entités représentés par des objets
Représenter des objets concrets ou conceptuels du monde réel
Une personne, un moyen de transport, une date, une liste...
Création de nouveaux types de données
Permet une programmation de plus haut niveau
31
État d’un objet
Chaque objet est unique et possède son propre état
Identité propre à chaque objet, avec ses propres attributs
L’état d’un objet est modifiable ou non
Objet immuable aura toujours le même état
État d’un objet non modifiable ne peut être changé
32
Manipuler les objets du monde
getFuelLevel
isOnGround
startEngine
startAutopilot
Mini-Projet
Site web de gestion avec base de données
Serveur web permettant de gérer une liste de films, cours,
musiques, contacts...
Base de donnéesServeur
Client GUI
34
Crédits
https://www.flickr.com/photos/sunshinecity/985725985
https://www.flickr.com/photos/madalena_pestana/2828893154
http://www.flickr.com/photos/jetstarairways/6769120131/
35

Contenu connexe

Tendances

Python.pptx
Python.pptxPython.pptx
Python.pptx
Jaouad Rachek
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
ABDESSELAM ARROU
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
Amri Ossama
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
Faycel Chaoua
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
Lilia Sfaxi
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
IbtissameAbbad1
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
ECAM Brussels Engineering School
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
Yassine Badri
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
Lilia Sfaxi
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
ECAM Brussels Engineering School
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
ABDESSELAM ARROU
 
Diagramme d'activité en UML
Diagramme d'activité en UMLDiagramme d'activité en UML
Diagramme d'activité en UML
Mireille Blay-Fornarino
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
ECAM Brussels Engineering School
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
Mariem ZAOUALI
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniShellmates
 
exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du merise
Yassine Badri
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Abdoulaye Dieng
 
Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3
Abel LIFAEFI MBULA
 

Tendances (20)

Python.pptx
Python.pptxPython.pptx
Python.pptx
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
Diagramme d'activité en UML
Diagramme d'activité en UMLDiagramme d'activité en UML
Diagramme d'activité en UML
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
CM processus-unifie
CM processus-unifieCM processus-unifie
CM processus-unifie
 
exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du merise
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3
 

En vedette

Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
ECAM Brussels Engineering School
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
ECAM Brussels Engineering School
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
ECAM Brussels Engineering School
 
UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
ECAM Brussels Engineering School
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
ECAM Brussels Engineering School
 
Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neuronesMed Zaibi
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
ECAM Brussels Engineering School
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
ECAM Brussels Engineering School
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
ECAM Brussels Engineering School
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
ECAM Brussels Engineering School
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
ECAM Brussels Engineering School
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
ECAM Brussels Engineering School
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
ECAM Brussels Engineering School
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
ECAM Brussels Engineering School
 
Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
ECAM Brussels Engineering School
 

En vedette (20)

Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
UKO-JAVA1001-slides
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
 
Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neurones
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
 

Similaire à Python avancé : Tuple et objet

Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
Amir Souissi
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
Abdoulaye Dieng
 
Theme 9(bis)
Theme 9(bis)Theme 9(bis)
Theme 9(bis)salmazen
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
Laurent BUNIET
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
Aziz Darouichi
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdf
AabidiHafid
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
salah fenni
 
Nettoyer et transformer ses données avec Openrefine : partie 2
Nettoyer et transformer ses données avec Openrefine : partie 2Nettoyer et transformer ses données avec Openrefine : partie 2
Nettoyer et transformer ses données avec Openrefine : partie 2
Mathieu Saby
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
Abdoulaye Dieng
 
Java uik-chap4-poo3
Java uik-chap4-poo3Java uik-chap4-poo3
Java uik-chap4-poo3Amel Morchdi
 
Marzouk collection-map
Marzouk collection-mapMarzouk collection-map
Marzouk collection-map
abderrahim marzouk
 
La programmation fonctionnelle avec le langage OCaml
La programmation fonctionnelle avec le langage OCamlLa programmation fonctionnelle avec le langage OCaml
La programmation fonctionnelle avec le langage OCaml
Stéphane Legrand
 
Js part2
Js part2Js part2
Js part2
Romdhani Asma
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: Tableau
InforMatica34
 
POO-chapitre6.pptx
POO-chapitre6.pptxPOO-chapitre6.pptx
POO-chapitre6.pptx
ImaneLoukili7
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
Aziz Darouichi
 
20XX-XX.cours.complexite.powerpoint.sdd.pptx
20XX-XX.cours.complexite.powerpoint.sdd.pptx20XX-XX.cours.complexite.powerpoint.sdd.pptx
20XX-XX.cours.complexite.powerpoint.sdd.pptx
Nabil Alami
 
RCarte_Commandes-R.pdf
RCarte_Commandes-R.pdfRCarte_Commandes-R.pdf
RCarte_Commandes-R.pdf
DrissRifai1
 

Similaire à Python avancé : Tuple et objet (20)

Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Theme 9(bis)
Theme 9(bis)Theme 9(bis)
Theme 9(bis)
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdf
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 
Nettoyer et transformer ses données avec Openrefine : partie 2
Nettoyer et transformer ses données avec Openrefine : partie 2Nettoyer et transformer ses données avec Openrefine : partie 2
Nettoyer et transformer ses données avec Openrefine : partie 2
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 
Theme 7
Theme 7Theme 7
Theme 7
 
Java uik-chap4-poo3
Java uik-chap4-poo3Java uik-chap4-poo3
Java uik-chap4-poo3
 
Marzouk collection-map
Marzouk collection-mapMarzouk collection-map
Marzouk collection-map
 
La programmation fonctionnelle avec le langage OCaml
La programmation fonctionnelle avec le langage OCamlLa programmation fonctionnelle avec le langage OCaml
La programmation fonctionnelle avec le langage OCaml
 
Js part2
Js part2Js part2
Js part2
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: Tableau
 
POO-chapitre6.pptx
POO-chapitre6.pptxPOO-chapitre6.pptx
POO-chapitre6.pptx
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
 
20XX-XX.cours.complexite.powerpoint.sdd.pptx
20XX-XX.cours.complexite.powerpoint.sdd.pptx20XX-XX.cours.complexite.powerpoint.sdd.pptx
20XX-XX.cours.complexite.powerpoint.sdd.pptx
 
RCarte_Commandes-R.pdf
RCarte_Commandes-R.pdfRCarte_Commandes-R.pdf
RCarte_Commandes-R.pdf
 

Plus de ECAM Brussels Engineering School

Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
ECAM Brussels Engineering School
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
ECAM Brussels Engineering School
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
ECAM Brussels Engineering School
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
ECAM Brussels Engineering School
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
ECAM Brussels Engineering School
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
ECAM Brussels Engineering School
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
ECAM Brussels Engineering School
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
ECAM Brussels Engineering School
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
ECAM Brussels Engineering School
 

Plus de ECAM Brussels Engineering School (10)

Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
 

Python avancé : Tuple et objet

  • 1. IN20 Informatique Séance 2 Tuple et objet Sébastien Combéfis, Quentin Lurkin lundi 21 septembre 2015
  • 2. Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
  • 3. Rappels Ensemble Collection non ordonnée d’éléments distincts Opérations ensemblistes Modification et ensemble non modifiable Dictionnaire Ensemble de paires clé-valeur, avec clés distinctes Opérations d’accès et de modification Base de données et format JSON 3
  • 4. Objectifs Utilisation de tuples Définition et utilisation Fonction avec plusieurs valeurs de retour Tuple nommé Introduction aux objets Création et utilisation d’objets Appel de méthode Programmation orientée objet 4
  • 6. Tuple Séquence ordonnée et non modifiable d’éléments Les éléments d’un tuple ne peuvent pas être modifiés Définition d’un tuple avec () Parenthèses pas obligatoires lorsqu’au moins un élément 1 # Tuple vide 2 a = () 3 4 # Tuples contenant un seul élément 5 b = 1, 6 c = (1,) 7 8 # Tuples contenant trois éléments 9 d = 1, 2, 3 10 e = (1, 2, 3) 6
  • 7. Somme des éléments d’un tuple Accès aux éléments d’un tuple avec les crochets En lecture seulement, l’accès en écriture est interdit Taille d’un tuple obtenue avec la fonction len Parcours d’un tuple avec while ou for 1 def sum(values): | def sum(values): 2 s = 0 | s = 0 3 i = 0 | for element in values: 4 while i < len(values): | s += element 5 s += values[i] | return s 6 i += 1 | 7 return s | 7
  • 8. Définition avec parenthèses Définition avec parenthèses d’un tuple parfois obligatoire Pour le tuple vide Lors d’un appel de fonction 1 result = sum(1, 2, 3) 2 3 # Solution correcte : 4 # result = sum ((1, 2, 3)) Traceback (most recent call last): File "program.py", line 9, in r = sum(1, 2, 3) TypeError: sum() takes 1 positional argument but 3 were given 8
  • 9. Emballage et déballage On peut emballer plusieurs valeurs dans un tuple Elles sont toutes accessibles à partir d’une seule variable On peut déballer un tuple dans plusieurs variables Chaque variable reçoit la valeur d’un élément du tuple 1 t = 1, 2, 3 2 print(t) 3 4 a, b, c = t 5 print(a, b, c, sep=’/’) (1, 2, 3) 1/2/3 9
  • 10. Plusieurs valeurs de retour Une fonction peut renvoyer plusieurs valeurs Il suffit en fait de renvoyer un tuple Fonction qui cherche un élément dans une liste Si l’élément est trouvé, renvoie True et son indice Sinon renvoie False et None comme indice 1 def find(list , element): 2 i = 0 3 while i < len(list): 4 if list[i] == element: # L’élément est trouvé 5 return True , i 6 i += 1 7 return False , None # L’élément n’a pas été trouvé 10
  • 11. Récupération des valeurs de retour Deux solutions pour récupérer les valeurs de retour Sous forme d’une variable contenant un tuple Avec autant de variables qu’il y a d’éléments dans le tuple 1 values = [1, 2, 3, 4] 2 3 result = find(values , 2) 4 found , index = find(values , 6) 5 6 print(result , found , index) (True , 1) False None 11
  • 12. Absence de valeur La valeur spéciale None représente l’absence de valeur A permis d’avoir des valeurs de retour homogènes pour find 1 def find(list , element): 2 i = 0 3 while i < len(list): 4 if list[i] == element: # L’élément est trouvé 5 return True , i 6 i += 1 7 return False # L’élément n’a pas été trouvé 8 9 values = [1, 2, 3, 4] 10 result = find(values , 2) # result peut être 11 # de différents type 12 if type(result) is tuple: 13 print(result [0], result [1]) 14 else: 15 print(result) 12
  • 13. Opérateur de déballage Deux manières de déballer un tuple Avec l’opérateur d’affectation Lors d’un appel de fonction Opérateur de déballage (*) lors d’un appel de fonction Déballe le tuple dans les paramètres de la fonction appelée 1 def max(a, b, c): 2 if a > b and a > c: 3 return a 4 elif b > c: 5 return b 6 return c 7 8 t = 1, 2, 3 9 result = max (*t) 13
  • 14. Affectation multiple Changer la valeur de plusieurs variables en une fois Combinaison d’emballage puis de déballage Permet d’échanger les valeurs de deux variables En une seule opération, sans variable intermédiaire 1 x, y = "Hello", 42 2 print(x, y) 3 4 x, y = y, x 5 print(x, y) Hello 42 42 Hello 14
  • 15. Tuple nommé Attribuer un nom à chacun des éléments d’un tuple Et permettre d’accéder aux éléments à partir du nom Création d’un tuple nommé en deux phases Définition d’un nouveau type de tuple nommé Création du tuple nommé 1 from collections import namedtuple 2 3 Item = namedtuple (’Item ’, [’barcode ’, ’description ’, ’price ’]) 4 5 coca = Item (5449000000996 , "Coca -Cola 33cl", 0.70) 15
  • 16. Accès aux champs Accès aux champs avec l’opérateur d’accès (.) Un tuple nommé est un tuple enrichi coca 0 barcode 1 description 2 price 5449000000996 "Coca-Cola 33cl" 0.7 1 print(len(coca)) # 3 2 print(coca [1]) # Coca -Cola 33cl 3 print(coca [1:3]) # (’Coca -Cola 33cl ’, 0.7) 4 5 print(coca.price) # 0.7 16
  • 17. Vecteur dans le plan (1) Définitions de fonctions qui agissent sur un vecteur Représentation textuelle et calcul de la norme 1 from math import sqrt 2 from collections import namedtuple 3 4 Vector = namedtuple (’Vector ’, [’x’, ’y’]) 5 6 def vectostr(v): 7 return "(" + str(v.x) + ", " + str(v.y) + ")" 8 9 def norm(v): 10 return sqrt(v.x ** 2 + v.y ** 2) 11 12 u = Vector (1, 1) 13 print(vectostr(u)) 14 print(norm(u)) 17
  • 18. Tuple nommé vs dictionnaire Éléments d’un tuple nommé ordonnés car séquence Un dictionnaire est un ensemble de paires clé-valeur Tuple nommé non modifiable On peut modifier et ajouter des valeurs à un dictionnaire Champs d’un tuple nommé sont des chaines de caractères Les clés d’un dictionnaire sont des valeurs non modifiables 18
  • 19. Objet
  • 20. Objet (1) Un objet combine des données et des fonctions Les fonctions ont accès complet aux données de l’objet Permet de définir des types de données complexes On a déjà renconté les listes, chaines de caractères, ensembles... 1 dice = {1, 2, 3, 4, 5, 6} # Initialisation des données 2 face = dice.pop () # Appel d’une fonction 3 4 print("La face visible du dé est :", face) La face visible du dé est : 1 20
  • 21. Objet (2) Trois éléments existent lorsqu’on crée un objet L’objet, avec ses attributs, se trouve en mémoire Une variable du même type que l’objet est déclarée Une référence vers l’objet est stockée dans la variable 1 dice = {1, 2, 3, 4, 5, 6} dice set set 1 2 3 4 5 6 21
  • 22. Création Création d’un objet en exécutant un constructeur Permet d’initialiser les attributs de l’objet 1 from datetime import time 2 3 start = time (14, 45, 21) 4 end = time (16, 15, 56) start time time hour : 14 minute : 45 second : 21 end time time hour : 16 minute : 15 second : 56 22
  • 24. Accès aux attributs Accès aux attributs d’un objet avec l’opérateur d’accès Exactement comme avec les tuples nommés L’accès peut se faire en lecture et/ou écriture Certains attributs sont protégés en lecture seule 1 startseconds = 3600 * start.hour + 60 * start.minute + start.second 2 endseconds = 3600 * end.hour + 60 * end.minute + end.second 3 4 difference = endseconds - startseconds 5 print("Le cours va durer :", difference , "secondes") 24
  • 25. Paramètre de type objet Une fonction peut recevoir des paramètres de type objet Le paramètre reçoit une copie de la référence vers l’objet 1 from datetime import time 2 3 def toseconds(t): 4 return 3600 * t.hour + 60 * t.minute + t.second 5 6 7 start = time (14, 45, 21) 8 end = time (16, 15, 56) 9 10 difference = toseconds(end) - toseconds(start) 11 print("Le cours va durer :", difference , "secondes") Le cours va durer : 5435 secondes 25
  • 26. Valeur de retour de type objet Une fonction peut renvoyer un objet La fonction crée l’objet et renvoie une référence vers ce dernier 1 from datetime import time 2 3 def theoreticalend (start , duration): 4 minute = start.minute + (duration % 60) 5 hour = start.hour + (duration // 60) + (minute // 60) 6 return time(hour , minute % 60, start.second) 7 8 9 start = time (14, 45, 21) 10 print("Le cours devrait finir à :", theoreticalend (start , 90)) Le cours devrait finir à : 16:15:21 26
  • 27. Appel de méthode (1) Une fonction associée à un objet est appelée une méthode Une méthode est appelée sur un objet cible 1 from calendar import TextCalendar 2 3 cal = TextCalendar () 4 cal.prmonth (2015 , 9) # Affiche le calendrier de septembre 2015 September 2015 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 27
  • 28. Appel de méthode (2) Méthode appelée avec l’opérateur d’appel de méthode (.) L’objet cible est précisé avant le point 1 from calendar import TextCalendar 2 3 cal = TextCalendar () 4 cal. setfirstweekday (6) # Change le premier jour de la semaine 5 cal.prmonth (2015 , 9) September 2015 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 28
  • 29. Vecteur dans le plan (2) Méthode appelée directement sur l’objet cible On ne doit plus passer le vecteur en paramètre fonction(tuple_nommé, paramètres) objet.methode(paramètres) 1 # u = Vector (1, 1) 2 # print(vectostr(u)) 3 # print(norm(u)) 4 5 u = Vector (1, 1) 6 print(u) 7 print(u.norm ()) 29
  • 30. Objet vs tuple nommé Modification possible des attributs d’un objet (directe ou non) Un tuple nommé est non modifiable Fonctions associées aux objets, appelées méthodes Fonction utilisant un tuple nommé doit le recevoir en paramètre Accès aux attributs peut être restreint aux méthodes Tous les champs d’un tuple sont toujours accessibles 30
  • 31. Programmation orientée objet La programmation orientée objet manipule des objets Concepts et entités représentés par des objets Représenter des objets concrets ou conceptuels du monde réel Une personne, un moyen de transport, une date, une liste... Création de nouveaux types de données Permet une programmation de plus haut niveau 31
  • 32. État d’un objet Chaque objet est unique et possède son propre état Identité propre à chaque objet, avec ses propres attributs L’état d’un objet est modifiable ou non Objet immuable aura toujours le même état État d’un objet non modifiable ne peut être changé 32
  • 33. Manipuler les objets du monde getFuelLevel isOnGround startEngine startAutopilot
  • 34. Mini-Projet Site web de gestion avec base de données Serveur web permettant de gérer une liste de films, cours, musiques, contacts... Base de donnéesServeur Client GUI 34