Vous êtes sur la page 1sur 94

Programmation en langage Python

U.E.F « Algorithmique et Programmation 2 »

Dr. Raik Aissaoui

Cours_1 page 1 / 94
Ressources

• logiciel
o tout le système Python est librement téléchargeable sur www.python.org
o Attention, nous utilisons la version 3 de python :
 python3.5 est installé en salle TP
 chez vous, vous pouvez installer la dernière version : Python 3.8.

• installation
 windows et macOS : www.python.org
 linux : utilisez le gestionnaire de paquets de votre distribution (software center,
synaptic, ou sudo apt install python3 )

Cours_1 page 2 / 94
Algorithmique et programmation
• on a :
 un problème général
 dont une instance est définie par certaines données
 dont la résolution procurera certains résultats

Cours_1 page 3 / 94
Algorithmique et programmation
• on a :
 un problème général
 dont une instance est définie par certaines données
 dont la résolution procurera certains résultats

• exemple :
trouver les occurrences de "gaattc" dans "atgagtgaattcgtca … cccgttaa"

réponse : positions 6, 124, 2540, 6723, …

Cours_1 page 4 / 94
Algorithmique et programmation
• on a :
 un problème général
 dont une instance est définie par certaines données
 dont la résolution procurera certains résultats

• exemple :
trouver les occurrences de "gaattc" dans "atgagtgaattcgtca … cccgttaa"

réponse : positions 6, 124, 2540, 6723, …

• algorithme : description précise des opérations à faire


• programme : expression d’un algorithme dans
un langage qu’un ordinateur « comprend »
exemple : Python3

Cours_1 page 5 / 94
Schéma de principe d’un ordinateur
Processeur Processeur
Actif : calcul, décodage et quadruple
coeur
bus Mémoire centrale
exécution des instructions Core i5 Passive : conservation des données.
Rapide : ~ 4 GHz Core i5 Rapide. Grosse : ~ 16 Go
(4 × 109 cycles/sec) Core i5 (16 × 109 cellules élémentaires)
Core i5

16 Go

Définition : Mémoire de masse (disque dur)


1 bit (binary digit = chiffre binaire) 2To  Plus grosse (~ 2 To = 2 × 1012).
1 byte = 1 octet = 8 bits Persistante. Lente.

Interfaces unité centrale – organes périphériques


Acquisition et production de données
clavier, écran, HP, imprimante, carte réseau, etc.

Cours_1 page 6 / 94
Principe de fonctionnement •
• le processeur exécute (automatiquement et très vite) les instructions
constituant un programme enregistré dans la mémoire

Cours_1 page 7 / 94
Principe de fonctionnement •
• le processeur exécute (automatiquement et très vite) les instructions
constituant un programme enregistré dans la mémoire
• les instructions représentent des opérations sur des données

Cours_1 page 8 / 94
Principe de fonctionnement •
• le processeur exécute (automatiquement et très vite) les instructions
constituant un programme enregistré dans la mémoire
• les instructions représentent des opérations sur des données
• certaines données sont enregistrées dans le programme,
d’autres sont obtenues durant l’exécution
 soit comme résultats des opérations précédentes
 soit acquises depuis l’extérieur (clavier, appareil de mesure, etc.)

Cours_1 page 9 / 94
Principe de fonctionnement •
• le processeur exécute (automatiquement et très vite) les instructions
constituant un programme enregistré dans la mémoire
• les instructions représentent des opérations sur des données
• certaines données sont enregistrées dans le programme,
d’autres sont obtenues durant l’exécution
 soit comme résultats des opérations précédentes
 soit acquises depuis l’extérieur (clavier, appareil de mesure, etc.)

• toutes les instructions et données sont des nombres

Cours_1 page 10 / 94
Principe de fonctionnement •
• le processeur exécute (automatiquement et très vite) les instructions
constituant un programme enregistré dans la mémoire
• les instructions représentent des opérations sur des données
• certaines données sont enregistrées dans le programme,
d’autres sont obtenues durant l’exécution
 soit comme résultats des opérations précédentes
 soit acquises depuis l’extérieur (clavier, appareil de mesure, etc.)

• toutes les instructions et données sont des nombres


• tous les nombres sont représentés dans le système binaire

Cours_1 page 11 / 94
Principe de fonctionnement
• le processeur exécute (automatiquement et très vite) les instructions
constituant un programme enregistré dans la mémoire
• les instructions représentent des opérations sur des données
• certaines données sont enregistrées dans le programme,
d’autres sont obtenues durant l’exécution
 soit comme résultats des opérations précédentes
 soit acquises depuis l’extérieur (clavier, appareil de mesure, etc.)

• toutes les instructions et données sont des nombres


• tous les nombres sont représentés dans le système binaire

01001111001001110010101010111100101000110101010001010
un octet un octet un octet un octet un octet un octet un octet

Cours_1 page 12 / 94
Langage évolué, compilation, interprétation •
• un langage évolué permet de représenter
 les nombres par leur notation usuelle
 les instructions par des opérateurs et des mots-clés expressifs et faciles à lire

Cours_1 page 13 / 94
Langage évolué, compilation, interprétation •
• un langage évolué permet de représenter
 les nombres par leur notation usuelle
 les instructions par des opérateurs et des mots-clés expressifs et faciles à lire

• avant exécution, instructions et données doivent être converties en binaire

Cours_1 page 14 / 94
Langage évolué, compilation, interprétation •
• un langage évolué permet de représenter
 les nombres par leur notation usuelle
 les instructions par des opérateurs et des mots-clés expressifs et faciles à lire

• avant exécution, instructions et données doivent être converties en binaire


• interprétation (« code source » est le programme que vous avez écrit) :

Cours_1 page 15 / 94
Langage évolué, compilation, interprétation
• un langage évolué permet de représenter
 les nombres par leur notation usuelle
 les instructions par des opérateurs et des mots-clés expressifs et faciles à lire

• avant exécution, instructions et données sont converties en binaire


• interprétation (« code source » est le programme que vous avez écrit) :

• compilation :

Cours_1 page 16 / 94
Analyse−programmation •
• le travail de l’analyste-programmeur devant un problème donné :
 trouver l’algorithme de résolution
 l’écrire dans un langage de programmation

Cours_1 page 17 / 94
Analyse−programmation •
• le travail de l’analyste-programmeur devant un problème donné :
 trouver l’algorithme de résolution
 l’écrire dans un langage de programmation

• des ressources à gérer et/ou optimiser ; les plus courantes :


 l’espace mémoire occupé par les données manipulées souvent couplés
 le temps que mettra l’ordinateur à obtenir la solution (inversement)

Cours_1 page 18 / 94
Analyse−programmation •
• le travail de l’analyste-programmeur devant un problème donné :
 trouver l’algorithme de résolution
 l’écrire dans un langage de programmation

• des ressources à gérer et/ou optimiser ; les plus courantes :


 l’espace mémoire occupé par les données manipulées souvent couplés
 le temps que mettra l’ordinateur à obtenir la solution (inversement)
• parfois les programmes sont erronés…
 erreurs de syntaxe et sémantiques : les langages de programmation sont très stricts
 erreurs de logique : la syntaxe est correcte
mais le programme ne résout pas le problème donné
 erreurs à l’exécution (ou exceptions) : des circonstances de l’exécution
font que le programme ne peut aboutir (ex : données absurdes)

Cours_1 page 19 / 94
Analyse−programmation
• le travail de l’analyste-programmeur devant un problème donné :
 trouver l’algorithme de résolution
 l’écrire dans un langage de programmation

• des ressources à gérer et/ou optimiser ; les plus courantes :


 l’espace mémoire occupé par les données manipulées souvent couplés
 le temps que mettra l’ordinateur à obtenir la solution (inversement)
• parfois les programmes sont erronés…
 erreurs de syntaxe et sémantiques : les langages de programmation sont très stricts
 erreurs de logique : la syntaxe est correcte
mais le programme ne résout pas le problème donné
 erreurs à l’exécution (ou exceptions) : des circonstances de l’exécution
font que le programme ne peut aboutir (ex : données absurdes)

• processus de développement :
Analyse Codage Test fin
Découverte d’erreurs
ou d’améliorations

Cours_1 page 20 / 94
Un programme de qualité est un programme… •
• correct
 qualité indispensable (et pourtant…) : quand les données sont valides
le programme doit donner un résultat « correct »
 difficile à établir : problème de l’exhaustivité des tests

Cours_1 page 21 / 94
Un programme de qualité est un programme… •
• correct
 qualité indispensable (et pourtant…) : quand les données sont valides
le programme doit donner un résultat « correct »
 difficile à établir : problème de l’exhaustivité des tests

• robuste
 même quand les données sont invalides le programme fournit quelque chose
 requiert beaucoup de soin de la part du programmeur

Cours_1 page 22 / 94
Un programme de qualité est un programme… •
• correct
 qualité indispensable (et pourtant…) : quand les données sont valides
le programme doit donner un résultat « correct »
 difficile à établir : problème de l’exhaustivité des tests

• robuste
 même quand les données sont invalides le programme fournit quelque chose
 requiert beaucoup de soin de la part du programmeur

• documenté
 documentation externe (le manuel) et interne (commentaires dans le programme)
 important pour le « client » et pour le programmeur

Cours_1 page 23 / 94
Un programme de qualité est un programme…
• correct
 qualité indispensable (et pourtant…) : quand les données sont valides
le programme doit donner un résultat « correct »
 difficile à établir : problème de l’exhaustivité des tests

• robuste
 même quand les données sont invalides le programme fournit quelque chose
 requiert beaucoup de soin de la part du programmeur

• documenté
 documentation externe (le manuel) et interne (commentaires dans le programme)
 important pour le « client » et pour le programmeur

• efficace
 les qualités précédentes étant acquises, le meilleur programme est
celui qui optimise les ressources (temps, mémoire, etc.), surtout le temps

Cours_1 page 24 / 94
Le langage Python •
• créé par Guido van Rossum (Pays-Bas, 1991). Trois éléments :
 définition du langage : vocabulaire, syntaxe, types de données
 machine Python (ou interpréteur)
 bibliothèque, devenue depuis très copieuse

Cours_1 page 25 / 94
Le langage Python •
• créé par Guido van Rossum (Pays-Bas, 1991). Trois éléments :
 définition du langage : vocabulaire, syntaxe, types de données
 machine Python (ou interpréteur)
 bibliothèque, devenue depuis très copieuse

• logiciel Open Source : nombreux contributeurs

Cours_1 page 26 / 94
Le langage Python •
• créé par Guido van Rossum (Pays-Bas, 1991). Trois éléments :
 définition du langage : vocabulaire, syntaxe, types de données
 machine Python (ou interpréteur)
 bibliothèque, devenue depuis très copieuse

• logiciel Open Source : nombreux contributeurs


• langage de scripting :
 interprété (partiellement compilé, de manière transparente)
 où il est facile d’exécuter des commandes système et d’autres programmes
 très approprié pour les activités système et réseau

Cours_1 page 27 / 94
Le langage Python
• créé par Guido van Rossum (Pays-Bas, 1991). Trois éléments :
 définition du langage : vocabulaire, syntaxe, types de données
 machine Python (ou interpréteur)
 bibliothèque, devenue depuis très copieuse

• logiciel Open Source : nombreux contributeurs


• langage de scripting :
 interprété (partiellement compilé, de manière transparente)
 où il est facile d’exécuter des commandes système et d’autres programmes
 très approprié pour les activités système et réseau

• en résumé : langage
 à l’approche très facile
 idéal pour écrire des scripts liant d’autres programmes
 où on peut envisager de créer des programmes complexes
 très répandu en bioinformatique
 équivalent (en fonctionnalités et cas d'utilisation) à Perl ou Ruby

Cours_1 page 28 / 94
Le mode immédiat (ou interactif) •
• la boucle supérieure (top-level loop) :

 read : la machine affiche une invite (>>>) et l’utilisateur tape
 une expression correcte
 eval : la machine obtient la valeur de cette expression
 print : la machine affiche cette valeur

• exemple :
>>> 2**8 # 2 à la puissance 8
256
>>>

Cours_1 page 29 / 94
Le mode immédiat (ou interactif) •
• la boucle supérieure (top-level loop) :

 read : la machine affiche une invite (>>>) et l’utilisateur tape
 une expression correcte
 eval : la machine obtient la valeur de cette expression
 print : la machine affiche cette valeur

• exemple :
>>> 2**8 # 2 à la puissance 8
256
>>>
• exception : si la valeur est None (convention), rien n’est affichée
>>> None
>>>
>>> nbr = 8
>>>

Cours_1 page 30 / 94
Le mode immédiat (ou interactif) •
• la boucle supérieure (top-level loop) :

 read : la machine affiche une invite (>>>) et l’utilisateur tape
 une expression correcte
 eval : la machine obtient la valeur de cette expression
 print : la machine affiche cette valeur

• exemple :
>>> 2**8 # 2 à la puissance 8
256
>>>
• exception : si la valeur est None (convention), rien n’est affichée
>>> None
>>>
>>> nbr = 8
>>>
• mode immédiat : bon moyen d’approcher le langage et tester ses idées

Cours_1 page 31 / 94
Le mode immédiat (ou interactif)
• la boucle supérieure (top-level loop) :

 read : la machine affiche une invite (>>>) et l’utilisateur tape
 une expression correcte
 eval : la machine obtient la valeur de cette expression
 print : la machine affiche cette valeur

• exemple :
>>> 2**8 # 2 à la puissance 8
256
>>>
• exception : si la valeur est None (convention), rien n’est affichée
>>> nbr = 8
>>>
• mode immédiat : bon moyen d’approcher le langage et tester ses idées
entre # et la fin de la ligne :
commentaire ignoré par python

Cours_1 page 32 / 94
Le mode immédiat (ou interactif) •
• Python interprété : utilisation en « mode calculette ». Exemple :

connexion au système (ici Linux)


[laurent@portpin]$

Cours_1 page 33 / 94
Le mode immédiat (ou interactif) •
• Python interprété : utilisation en « mode calculette ». Exemple :

connexion au système (ici Linux)


[laurent@portpin]$ python3
Python 3.4.2 (v3.4.2:d047928ae3f6, May 16 2013, 00:06:53)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-47)] on linux2
Type "copyright", "credits" or "license()" for more information.
>>>

Cours_1 page 34 / 94
Le mode immédiat (ou interactif) •
• Python interprété : utilisation en « mode calculette ». Exemple :

connexion au système (ici Linux)


[laurent@portpin]$ python3
Python 3.4.2 (v3.4.2:d047928ae3f6, May 16 2013, 00:06:53)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-47)] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> 2 + 3
5
>>>

Cours_1 page 35 / 94
Le mode immédiat (ou interactif) •
• Python interprété : utilisation en « mode calculette ». Exemple :

connexion au système (ici Linux)


[laurent@portpin]$ python3
Python 3.4.2 (v3.4.2:d047928ae3f6, May 16 2013, 00:06:53)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-47)] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> 2 + 3
5
>>> nbr = 10
>>>

Cours_1 page 36 / 94
Le mode immédiat (ou interactif) •
• Python interprété : utilisation en « mode calculette ». Exemple :

connexion au système (ici Linux)


[laurent@portpin]$ python3
Python 3.4.2 (v3.4.2:d047928ae3f6, May 16 2013, 00:06:53)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-47)] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> 2 + 3
5
>>> nbr = 10
>>> nbr
10
>>>

Cours_1 page 37 / 94
Le mode immédiat (ou interactif) •
• Python interprété : utilisation en « mode calculette ». Exemple :

connexion au système (ici Linux)


[laurent@portpin]$ python3
Python 3.4.2 (v3.4.2:d047928ae3f6, May 16 2013, 00:06:53)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-47)] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> 2 + 3
5
>>> nbr = 10
>>> nbr
10
>>> print("Bonjour")
Bonjour
>>>

Cours_1 page 38 / 94
Le mode immédiat (ou interactif)
• Python interprété : utilisation en « mode calculette ». Exemple :

connexion au système (ici Linux)


[laurent@portpin]$ python3
Python 3.4.2 (v3.4.2:d047928ae3f6, May 16 2013, 00:06:53)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-47)] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> 2 + 3
5
>>> nbr = 10
>>> nbr
10
>>> print("Bonjour")
Bonjour
>>> Ctrl D
[laurent@portpin]$

Cours_1 page 39 / 94
Données, opérateurs, expressions •
• données : données initiales, résultats, valeurs intermédiaires
• types primitifs :
 entiers (sur 32 bits)
0 123 -50

Cours_1 page 40 / 94
Données, opérateurs, expressions •
• données : données initiales, résultats, valeurs intermédiaires
• types primitifs :
 entiers (sur 32 bits)
0 123 -50
 entiers longs
340282366920938463463374607431768211456 1L

Cours_1 page 41 / 94
Données, opérateurs, expressions •
• données : données initiales, résultats, valeurs intermédiaires
• types primitifs :
 entiers (sur 32 bits)
0 123 -50
 entiers longs
340282366920938463463374607431768211456 1L
 nombres non entiers (on dit « flottants »)
1.5 -0.33333333333333331 0.166054018e-23

Cours_1 page 42 / 94
Données, opérateurs, expressions •
• données : données initiales, résultats, valeurs intermédiaires
• types primitifs :
 entiers (sur 32 bits)
0 123 -50
 entiers longs
340282366920938463463374607431768211456 1L
 nombres non entiers (on dit « flottants »)
1.5 -0.33333333333333331 0.166054018e-23
 chaînes de caractères
"J'aime Python"

Cours_1 page 43 / 94
Données, opérateurs, expressions
• données : données initiales, résultats, valeurs intermédiaires
• types primitifs :
 entiers (sur 32 bits)
0 123 -50
 entiers longs
340282366920938463463374607431768211456 1L
 nombres non entiers (on dit « flottants »)
1.5 -0.33333333333333331 0.166054018e-23
 chaînes de caractères
"J'aime Python"
 quelques valeurs conventionnelles
Booléens : True (vrai), False (faux),
Absence de valeur : None

Cours_1 page 44 / 94
A propos des nombres •
• possibilité d’écrire un nombre en base 8 (octal) ou 16 (hexadécimal)
>>> 0o33 # 3 x 8 + 3 = 27
27
>>> 0x1B # 1 x 16 + 11 = 27
27

Cours_1 page 45 / 94
A propos des nombres •
• possibilité d’écrire un nombre en base 8 (octal) ou 16 (hexadécimal)
>>> 0o33 # 3 x 8 + 3 = 27
27
>>> 0x1B # 1 x 16 + 11 = 27
27

• attention à la division entre entiers


>>> 1 / 3
0

Cours_1 page 46 / 94
A propos des nombres
• possibilité d’écrire un nombre en base 8 (octal) ou 16 (hexadécimal)
>>> 0o33 # 3 x 8 + 3 = 27
27
>>> 0x1B # 1 x 16 + 11 = 27
27

• attention à la division entre entiers


>>> 1 / 3 >>> 1 / 3
0 0.3333333333333333

• expressions mixtes (règle du plus fort)


>>> 1.0 / 3 >>> 1 // 3
0.33333333333333331 0
>>> float(1) / 3 >>> 1.0 // 3.0
0.33333333333333331 0
Python2 :( Python3 :)

Cours_1 page 47 / 94
Chaînes de caractères •
• plusieurs notations
>>> "Bonjour"
'Bonjour'
>>>

Cours_1 page 48 / 94
Chaînes de caractères •
• plusieurs notations
>>> "Bonjour"
'Bonjour'
>>> "Bonjour" == 'Bonjour'
True
>>>

Cours_1 page 49 / 94
Chaînes de caractères •
• plusieurs notations
>>> "Bonjour"
'Bonjour'
>>> "Bonjour" == 'Bonjour'
True
>>> 'Il a dit "bonjour"'
'Il a dit "bonjour"'
>>>

Cours_1 page 50 / 94
Chaînes de caractères •
• plusieurs notations
>>> "Bonjour"
'Bonjour'
>>> "Bonjour" == 'Bonjour'
True
>>> 'Il a dit "bonjour"'
'Il a dit "bonjour"'
>>> 'J\'ai dit "bonjour"'
'J\'ai dit "bonjour"'
>>>

Cours_1 page 51 / 94
Chaînes de caractères •
• plusieurs notations
>>> "Bonjour"
'Bonjour'
>>> "Bonjour" == 'Bonjour'
True
>>> 'Il a dit "bonjour"'
'Il a dit "bonjour"'
>>> 'J\'ai dit "bonjour"'
'J\'ai dit "bonjour"'
>>> print('J\'ai dit "bonjour"')
J'ai dit "bonjour"
>>>

Cours_1 page 52 / 94
Chaînes de caractères •
• plusieurs notations
>>> "Bonjour"
'Bonjour'
>>> "Bonjour" == 'Bonjour'
True
>>> 'Il a dit "bonjour"'
'Il a dit "bonjour"'
>>> 'J\'ai dit "bonjour"'
'J\'ai dit "bonjour"'
>>> print('J\'ai dit "bonjour"')
J'ai dit "bonjour"
>>> """Ceci est une
longue chaine"""
'Ceci est une\nlongue chaine'
>>>

représente la marque de fin de ligne

Cours_1 page 53 / 94
Chaînes de caractères
• plusieurs notations
>>> "Bonjour"
'Bonjour'
>>> "Bonjour" == 'Bonjour'
True
>>> 'Il a dit "bonjour"'
'Il a dit "bonjour"'
>>> 'J\'ai dit "bonjour"'
'J\'ai dit "bonjour"'
>>> print('J\'ai dit "bonjour"')
J'ai dit "bonjour"
>>> """Ceci est une
longue chaine"""
'Ceci est une\nlongue chaine'
>>> print("""Ceci est une
longue chaine""")
Ceci est une
longue chaine
>>>

Cours_1 page 54 / 94
Des opérations avec des chaînes •
• concaténation
>>> "Bonjour" + " a tous"
'Bonjour a tous'
>>>

Cours_1 page 55 / 94
Des opérations avec des chaînes •
• concaténation
>>> "Bonjour" + " a tous"
'Bonjour a tous'
>>> "Bonsoir" * 3
'BonsoirBonsoirBonsoir'
>>>

Cours_1 page 56 / 94
Des opérations avec des chaînes •
• concaténation
>>> "Bonjour" + " a tous"
'Bonjour a tous'
>>> "Bonsoir" * 3
'BonsoirBonsoirBonsoir'
>>>

• accès aux caractères


>>> "Bonjour"[3]
'j'
>>>

Cours_1 page 57 / 94
Des opérations avec des chaînes •
• concaténation
>>> "Bonjour" + " a tous"
'Bonjour a tous'
>>> "Bonsoir" * 3
'BonsoirBonsoirBonsoir'
>>>

• accès aux caractères


>>> "Bonjour"[3]
'j'
>>> "Bonjour"[0]
'B'
>>>

Cours_1 page 58 / 94
Des opérations avec des chaînes •
• concaténation
>>> "Bonjour" + " a tous"
'Bonjour a tous'
>>> "Bonsoir" * 3
'BonsoirBonsoirBonsoir'
>>>

• accès aux caractères


>>> "Bonjour"[3]
'j'
>>> "Bonjour"[0]
'B'
>>> "Bonjour"[6]
'r'
>>>

Cours_1 page 59 / 94
Des opérations avec des chaînes •
• concaténation
>>> "Bonjour" + " a tous"
'Bonjour a tous'
>>> "Bonsoir" * 3
'BonsoirBonsoirBonsoir'
>>>

• accès aux caractères


>>> "Bonjour"[3]
'j'
>>> "Bonjour"[0]
'B'
>>> "Bonjour"[6]
'r'
>>> "Bonjour"[-1]
'r'
>>>

Cours_1 page 60 / 94
Des opérations avec des chaînes •
• concaténation • extraction de sous-chaîne
>>> "Bonjour" + " a tous" >>> "Bonjour"[2:5]
'Bonjour a tous' 'njo'
>>> "Bonsoir" * 3 >>>
'BonsoirBonsoirBonsoir'
>>>

• accès aux caractères


>>> "Bonjour"[3]
'j'
>>> "Bonjour"[0]
'B'
>>> "Bonjour"[6]
'r'
>>> "Bonjour"[-1]
'r'
>>>

Cours_1 page 61 / 94
Des opérations avec des chaînes •
• concaténation • extraction de sous-chaîne
>>> "Bonjour" + " a tous" >>> "Bonjour"[2:5]
'Bonjour a tous' 'njo'
>>> "Bonsoir" * 3 >>> "Bonjour"[2:]
'BonsoirBonsoirBonsoir' 'njour'
>>> >>>

• accès aux caractères


>>> "Bonjour"[3]
'j'
>>> "Bonjour"[0]
'B'
>>> "Bonjour"[6]
'r'
>>> "Bonjour"[-1]
'r'
>>>

Cours_1 page 62 / 94
Des opérations avec des chaînes •
• concaténation • extraction de sous-chaîne
>>> "Bonjour" + " a tous" >>> "Bonjour"[2:5]
'Bonjour a tous' 'njo'
>>> "Bonsoir" * 3 >>> "Bonjour"[2:]
'BonsoirBonsoirBonsoir' 'njour'
>>> >>> "Bonjour"[:5]
'Bonjo'
• accès aux caractères >>>

>>> "Bonjour"[3]
'j'
>>> "Bonjour"[0]
'B'
>>> "Bonjour"[6]
'r'
>>> "Bonjour"[-1]
'r'
>>>

Cours_1 page 63 / 94
Des opérations avec des chaînes •
• concaténation • extraction de sous-chaîne
>>> "Bonjour" + " a tous" >>> "Bonjour"[2:5]
'Bonjour a tous' 'njo'
>>> "Bonsoir" * 3 >>> "Bonjour"[2:]
'BonsoirBonsoirBonsoir' 'njour'
>>> >>> "Bonjour"[:5]
'Bonjo'
• accès aux caractères >>> "Bonjour"[:]
'Bonjour'
>>> "Bonjour"[3] >>>
'j'
>>> "Bonjour"[0]
'B'
>>> "Bonjour"[6]
'r'
>>> "Bonjour"[-1]
'r'
>>>

Cours_1 page 64 / 94
Des opérations avec des chaînes •
• concaténation • extraction de sous-chaîne
>>> "Bonjour" + " a tous" >>> "Bonjour"[2:5]
'Bonjour a tous' 'njo'
>>> "Bonsoir" * 3 >>> "Bonjour"[2:]
'BonsoirBonsoirBonsoir' 'njour'
>>> >>> "Bonjour"[:5]
'Bonjo'
• accès aux caractères >>> "Bonjour"[:]
'Bonjour'
>>> "Bonjour"[3] >>> "Bonjour"[3:3]
'j' ''
>>> "Bonjour"[0] >>>
'B'
>>> "Bonjour"[6]
'r'
>>> "Bonjour"[-1]
'r'
>>>

Cours_1 page 65 / 94
Des opérations avec des chaînes •
• concaténation • extraction de sous-chaîne
>>> "Bonjour" + " a tous" >>> "Bonjour"[2:5]
'Bonjour a tous' 'njo'
>>> "Bonsoir" * 3 >>> "Bonjour"[2:]
'BonsoirBonsoirBonsoir' 'njour'
>>> >>> "Bonjour"[:5]
'Bonjo'
• accès aux caractères >>> "Bonjour"[:]
'Bonjour'
>>> "Bonjour"[3] >>> "Bonjour"[3:3]
'j' ''
>>> "Bonjour"[0] >>> "Bonjour"[3:4]
'B' 'j'
>>> "Bonjour"[6]
'r'
>>> "Bonjour"[-1]
'r'
>>>

Cours_1 page 66 / 94
Des opérations avec des chaînes
• concaténation • extraction de sous-chaîne
>>> "Bonjour" + " a tous" >>> "Bonjour"[2:5]
'Bonjour a tous' 'njo'
>>> "Bonsoir" * 3 >>> "Bonjour"[2:]
'BonsoirBonsoirBonsoir' 'njour'
>>> >>> "Bonjour"[:5]
'Bonjo'
• accès aux caractères >>> "Bonjour"[:]
'Bonjour'
>>> "Bonjour"[3] >>> "Bonjour"[3:3]
'j' ''
>>> "Bonjour"[0] >>> "Bonjour"[3:4]
'B' 'j'
>>> "Bonjour"[6]
'r' "Bonjour"[2:5]
>>> "Bonjour"[-1]
'r'
>>> 0 1 2 3 4 5 6 7 8

'njo'
Cours_1 page 67 / 94
Variables
• variable : liaison d’un nom à une donnée (pendant un certain temps)
 une donnée
 une(des) cellule(s) mémoire où elle est conservée
 un nom
90.0

vitesse

• 1er service rendu par les langages de programmation :


permettre de désigner les données et les cellules mémoire
par des noms significatifs

Cours_1 page 68 / 94
Variables •
• variable : liaison d’un nom à une donnée (pendant un certain temps)
 une donnée
 une(des) cellule(s) mémoire où elle est conservée
 un nom
90.0

vitesse

• affectation : opération par laquelle on crée cette liaison


>>> vitesse = 90.0
>>>

Cours_1 page 69 / 94
Variables
• variable : liaison d’un nom à une donnée (pendant un certain temps)
 une donnée
 une(des) cellule(s) mémoire où elle est conservée
 un nom
90.0

vitesse

• affectation : opération par laquelle on crée cette liaison


>>> vitesse = 90.0
>>>

• accès : toute occurrence (ailleurs qu’à gauche de « = »)


du nom d’une variable représente la valeur de celle-ci
>>> 1000 * vitesse / 3600
25.0
>>>

Cours_1 page 70 / 94
Les variables évoluent •
>>> vitesse
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'vitesse' is not defined
>>>

Cours_1 page 71 / 94
Les variables évoluent •
>>> vitesse
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'vitesse' is not defined
>>> vitesse = 120
>>> la première affectation
définit la variable

Cours_1 page 72 / 94
Les variables évoluent •
>>> vitesse
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'vitesse' is not defined
>>> vitesse = 120
>>> vitesse
120
>>>

Cours_1 page 73 / 94
Les variables évoluent •
>>> vitesse
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'vitesse' is not defined
>>> vitesse = 120
>>> vitesse
120
>>> vitesse = 90
>>> vitesse
90
>>>

chaque nouvelle affectation


change la valeur de la variable

Cours_1 page 74 / 94
Les variables évoluent •
>>> vitesse
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'vitesse' is not defined
>>> vitesse = 120
>>> vitesse
120
>>> vitesse = 90 quel est le type de cette variable ?
>>> vitesse
90
>>> type(vitesse)
<type 'int'>
>>> vitesse = 90.0
>>> type(vitesse)
<type 'float'>
>>>

le type change aussi

Cours_1 page 75 / 94
Les variables évoluent
>>> vitesse
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'vitesse' is not defined
>>> vitesse = 120
>>> vitesse
120
>>> vitesse = 90
>>> vitesse
90
>>> type(vitesse)
<type 'int'>
>>> vitesse = 90.0
>>> type(vitesse)
<type 'float'>
>>> vitesse = "a l'arret"
>>> vitesse
"a l'arret"
>>>

Cours_1 page 76 / 94
Affecter n’est pas comparer •
• affectation : a un effet, n’a pas de valeur
>>> a = b
>>>
− produit un changement (de la valeur de a)
− ne renvoie pas de valeur

Cours_1 page 77 / 94
Affecter n’est pas comparer
• affectation : a un effet, n’a pas de valeur
>>> a = b
>>>
− produit un changement (de la valeur de a)
− ne renvoie pas de valeur

• comparaison : a une valeur, n’a pas d’effet


>>> a == b
False
>>>
− aucune variable n’est changée
− renvoie une valeur (par exemple, False)

Cours_1 page 78 / 94
Affectations multiples •
• affecter plusieurs variables par la même valeur
>>> a = b = c = 0
>>>

Cours_1 page 79 / 94
Affectations multiples •
• affecter plusieurs variables par la même valeur
>>> a = b = c = 0
>>>

• affecter plusieurs variables en même temps


>>> a, b = 0, 1
>>>

Cours_1 page 80 / 94
Affectations multiples
• affecter plusieurs variables par la même valeur
>>> a = b = c = 0
>>>

• affecter plusieurs variables en même temps


>>> a, b = 0, 1
>>>

• plus fort :
>>> a, b = b, a + b
>>>

couple de variables couple de valeurs

Cours_1 page 81 / 94
Opérateurs et expressions
• expression
 assemblage de constantes, variables et opérateurs
 soumis à une syntaxe précise
 qui renvoie une valeur
volume = surfaceBase * hauteur / 3

expression

• 2ème service rendu par les langages de programmation :


les expressions s’y écrivent comme on nous l’a appris
• attention : tous les éléments d’une expression doivent être définis
>>> volume = surfaceBase * hauteur / 3
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'surfaceBase' is not defined
>>>

Cours_1 page 82 / 94
Opérateurs •
• arithmétiques : + − * ** / %
>>> 2 ** 3 # puissance
8
>>> 17 % 5 # modulo (reste de la division entière)
2
>>>

Cours_1 page 83 / 94
Opérateurs •
• arithmétiques : + − * ** / %
>>> 2 ** 3 # puissance
8
>>> 17 % 5 # modulo (reste du quotient)
2
>>>
• comparaison : == != < <= > >=
>>> 2 ** 3 == 8
True
>>>

Cours_1 page 84 / 94
Opérateurs •
• arithmétiques : + − * ** / %
>>> 2 ** 3 # puissance
8
>>> 17 % 5 # modulo (reste du quotient)
2
>>>
• comparaison : == != < <= > >=
>>> 2 ** 3 == 8
True
>>>
• logiques : and or not
>>> x = 14
>>> x >= 10 and x <= 20
True
>>>

Cours_1 page 85 / 94
Opérateurs
• arithmétiques : + − * ** / %
>>> 2 ** 3 # puissance
8
>>> 17 % 5 # modulo (reste du quotient)
2
>>>
• comparaison : == != < <= > >=
>>> 2 ** 3 == 8
True
>>>
• logiques : and or not
>>> x = 14
>>> x >= 10 and x <= 20
True
>>>
• quelques bizarreries : + (entre chaînes), % (avec une chaîne), etc.

Cours_1 page 86 / 94
Opérateurs : priorité, associativité, parenthèses
• ambiguïté de la notation infixée : que signifie

10 + 2 * 3

• priorité de chaque opérateur


 hiérarchisation des opérateurs (* / plus forts que + -, and plus fort que or, etc.)
 les priorités des opérandes doivent être >= la priorité de l’opérateur
 les parenthèses rendent l’expression qu’elles encadrent plus prioritaire que tout

(10 + 2) * 3 10 + 2 * 3

Cours_1 page 87 / 94
Opérateurs : priorité, associativité, parenthèses
• et entre opérateurs de même priorité ?

100 - 10 - 1

• associativité de chaque opérateur :


de gauche à droite : 100 - 10 - 1 signifie (100 - 10) – 1

100 – 10 - 1 100 – (10 – 1)

Cours_1 page 88 / 94
Opérateurs Booléens •
• Nom tiré de l'algèbre de George Boole (~1850) :
>>> True
True
>>> not True
False
>>> True or False
True
>>> True and False
False
>>> 5 > 4
True
>>> 5 > 4 and 2 > 3
False
>>> (5 > 4 or 2 > 3) and (10 < 8 or 4 < 1)
False

Cours_1 page 89 / 94
Importer des modules de la bibliothèque •
>>> sqrt(4)
[...] sqrt appartient au module math
NameError: name 'sqrt' is not defined
>>>

Cours_1 page 90 / 94
Importer des modules de la bibliothèque •
>>> sqrt(4)
[...] sqrt appartient au module math
NameError: name 'sqrt' is not defined
>>> math.sqrt(4)
[...]
NameError: name 'math' is not defined
le module math n’est pas
>>> connu

Cours_1 page 91 / 94
Importer des modules de la bibliothèque •
>>> sqrt(4)
[...] sqrt appartient au module math
NameError: name 'sqrt' is not defined
>>> math.sqrt(4)
[...]
NameError: name 'math' is not defined
le module math n’est pas
>>> import math connu
>>> math.sqrt(4)
2.0
>>>

Cours_1 page 92 / 94
Importer des modules de la bibliothèque •
>>> sqrt(4)
[...] sqrt appartient au module math
NameError: name 'sqrt' is not defined
>>> math.sqrt(4)
[...]
NameError: name 'math' is not defined
le module math n’est pas
>>> import math connu
>>> math.sqrt(4)
2.0
>>> sqrt(4) importer ne dispense pas
[...]
NameError: name 'sqrt' is not defined de préfixer, sauf si…
>>>

Cours_1 page 93 / 94
Importer des modules de la bibliothèque
>>> sqrt(4)
[...] sqrt appartient au module math
NameError: name 'sqrt' is not defined
>>> math.sqrt(4)
[...]
NameError: name 'math' is not defined
le module math n’est pas
>>> import math connu
>>> math.sqrt(4)
2.0
>>> sqrt(4) importer ne dispense pas
[...]
NameError: name 'sqrt' is not defined de préfixer, sauf si…
>>> from math import sqrt
>>> sqrt(4)
2.0
>>>

Cours_1 page 94 / 94

Vous aimerez peut-être aussi