You are on page 1of 66

Dcouverte de la Programmation

Sous Python

Source : Support de Grard Swinnen


La programmation
Dmarche
Penser, rflchir,
Rsoudre un problme la manire dun analyste.
Utiliser un langage formel pour dcrire notre raisonnement

La programmation consiste expliquer en dtails une machine ce qu'elle doit faire,


en sachant qu'elle ne peut pas vritablement comprendre un langage humain,
mais seulement effectuer un traitement automatique sur des squences de
caractres.

Un programme n'est rien d'autre qu'une suite d'instructions, codes en respectant de


manire stricte un ensemble de conventions fixes l'avance que l'on appelle un
langage informatique. La machine est ainsi pourvue d'un mcanisme qui dcode ces
instructions en associant chaque mot du langage une action prcise.

Apprendre programmer :
1. activit intressante qui contribue dvelopper votre intelligence.
2. procure une grande satisfaction : pouvoir raliser des projets concrets.
Machine, Langage et Programmation
Dans son fonctionnement interne, un ordinateur est totalement
incapable de traiter autre chose que des nombres binaires.

00110011001100110011000011111100001111.
Alors que nous raisonnons en base 10 (grce nos 10 doigts)
Imaginez quun ordinateur ne sache compter quavec une paire de doigts

Toute information d'un autre type doit tre convertie, ou code, en


format binaire. Cela est vrai pour :

les donnes que l'on souhaite traiter (les textes, les


images, les sons, les nombres, etc.),

les programmes : c'est--dire les squences d'instructions


que l'on va fournir la machine pour lui dire ce qu'elle doit
faire avec ces donnes.
Machine, Langage et Programmation
Le seul langage que l'ordinateur puisse vritablement comprendre
est donc trs loign de ce que nous utilisons nous-mmes.

C'est une longue suite de 1 et de 0 (les "bits") souvent traits par groupes
de 8 (les octets ), 16, 32, ou mme 64.

00011111, 1E , AB6D, etc

Ce langage machine est videmment presque incomprhensible


pour nous.

Pour parler un ordinateur, il nous faudra utiliser des systmes de


traduction automatiques, capables de convertir en nombres binaires des
suites de caractres formant des mots-cls (anglais en gnral) qui seront
plus significatifs pour nous.
Machine, Langage et Programmation

Le systme de traduction proprement dit s'appellera interprteur


ou bien compilateur, suivant la mthode utilise pour effectuer la
traduction.

On appellera langage de programmation un ensemble de


mots-cls (choisis arbitrairement) associ un ensemble
de rgles trs prcises indiquant comment on peut assembler
ces mots pour former des phrases que l'interprteur ou le
compilateur puisse traduire en langage machine (binaire)

Langage de haut niveau ?


Langage de bas niveau ?
Langage machine, langage de programmation

Le langage que vous allez dcouvrir en premier est Python

Pourquoi ?
Il s'agit d'un langage de haut niveau

Il est beaucoup plus facile d'crire un programme dans un


langage de haut niveau : l'criture du programme prend donc
beaucoup moins de temps (versus sa traduction?)

le programme sera souvent portable : on peut le faire


fonctionner sans aucune modification, sur des machines ou
des systmes d'exploitation diffrents (versus programme de
bas niveau).
Compilation et Interprtation

Il existe deux techniques de traduction

Ce que nous crirons Affichage ligne


par ligne
Ce que lon utilisera chaque fois
que lon voudra excuter le code
source : traduction/excution
ligne par ligne.
Compilation et interprtation

traduit la totalit du Programme prt tre excut


texte source en une
fois
Compilation et interprtation
Chacune de ces deux techniques a ses avantages et ses inconvnients

L'interprtation est idale lorsque l'on est en phase d'apprentissage du


langage. Avec cette technique, on peut tester immdiatement toute
modification apporte au programme source, sans passer par une phase
de compilation qui demande toujours plus de temps.

Par contre, lorsqu'un projet comporte des fonctionnalits complexes qui


doivent s'excuter rapidement, la compilation est prfrable : il est clair
qu'un programme compil fonctionnera toujours nettement plus vite que
son homologue interprt, puisque dans cette technique l'ordinateur n'a
plus (re)traduire chaque instruction en code binaire avant qu'elle puisse
tre excute.
Compilation et interprtation
Certains langages modernes tentent de combiner
les deux techniques afin de garder le meilleur de
chacune.

Python

JAVA

trs facile interprter


portable
Compilation et interprtation

Remarque

Tout ceci peut paratre un peu compliqu, mais la bonne nouvelle


est que tout ceci est pris en charge automatiquement par
l'environnement de dveloppement de Python.

Il vous suffira d'entrer vos commandes au clavier, de frapper <Enter>,


et Python se chargera de les compiler et de les interprter pour vous.
Mise au point d'un programme.
Recherche des erreurs debug
3 types derreurs :
1. syntaxe : se rfre aux rgles que les auteurs du langage ont
tablies pour la structure du programme.

2. smantique : cest une erreur de logique, i.e, le programme est sans


erreurs mais les rsultats sont inattendus.

3. dexcution ou Run-time error : lorsque votre programme


fonctionne dj, mais que des circonstances particulires se
prsentent (par exemple, votre programme essaie de lire un fichier qui
n'existe plus, une division par zro).
Langages naturels et langages formels
1. Les langages naturels sont ceux que les tres humains utilisent pour
communiquer. Ces langages n'ont pas t mis au point dlibrment (encore
que certaines instances tchent d'y mettre un peu d'ordre) : ils voluent
naturellement.

2. Les langages formels sont des langages dvelopps par nous mme, en vue
d'applications spcifiques.

Par exemple, le systme de notation utilis par les mathmaticiens est un


langage formel particulirement efficace pour reprsenter les relations
entre nombres et grandeurs diverses.

Les chimistes utilisent un langage formel pour reprsenter la structure des


molcules

, etc.

Les langages de programmation sont des langages formels qui ont t


dvelopps pour dcrire des algorithmes et des structures de donnes.
Langages naturels et langages formels

Par comparaison au systme de raisonnement humain

Lorsque vous lisez une phrase quelconque, vous devez arriver vous
reprsenter la structure logique de la phrase (mme si vous le faites
inconsciemment la plupart du temps).

Par exemple, lorsque vous lisez la phrase la pice est tombe , vous
comprenez que la pice en est le sujet et est tombe le verbe.
L'analyse vous permet de comprendre la signification et la logique de la
phrase (sa smantique).
D'une manire analogue, l'interprteur Python devra analyser la
structure de votre programme source pour en extraire la signification.

Les langages naturels et formels ont donc beaucoup de caractristiques


communes (symboles, syntaxe, smantique), mais ils prsentent aussi des
diffrences trs importantes : ambigut et redondance chez lun, littralit
chez lautre.
Premiers PAS !

1. Nous allons demander l'ordinateur de travailler notre


place, en lui donnant, par exemple, l'ordre d'effectuer une
addition et d'afficher le rsultat.

2. Pour cela, nous allons devoir lui transmettre des instructions


, et galement lui indiquer les donnes auxquelles nous
voulons appliquer ces instructions.

3. Nous allons dabord calculer avec Python en mode interactif,


i.e. en dialoguant avec lui directement depuis le clavier pour
dcouvrir rapidement un grand nombre de fonctionnalits.
Premiers PAS !
Calculer avec Python en mode interactif

L'interprteur peut tre lanc directement depuis la ligne de commande (dans un


shell Linux, ou bien dans une fentre DOS sous Windows) : taper la commande
"python"

Les trois caractres >>> constituent le signal d'invite, ou prompt principal, lequel
vous indique que Python est prt excuter une commande.
Calculer avec Python en mode interactif

1. utiliser l'interprteur comme une simple calculatrice de bureau.


2. tester des commandes, comme :

>>> 5+3
>>> 2 - 9 # les espaces sont optionnels
>>> 7 + 3 * 4 # la hirarchie des oprations mathmatiques
# est-elle respecte ?
>>> (7+3)*4
>>> 20 / 3

Les parenthses sont fonctionnelles.


Donnes et variables

1. Un programme d'ordinateur consiste manipuler des donnes.


2. Ces donnes peuvent tre trs diverses mais dans la mmoire de l'ordinateur
elles se ramnent toujours et en dfinitive une suite finie de nombres binaires.

Mmoire
@
Taille 1110000000011
Une variable apparat dans un langage de
@ 1110001110011 programmation sous un nom de variable,
Prix_Unitaire 1110001110000 mais pour l'ordinateur il s'agit d'une rfrence
@
Quantit 0000001110011 dsignant une adresse mmoire, c'est--dire
0000000000011 un emplacement prcis dans la mmoire vive.
.
.
.
3. Pour pouvoir accder aux donnes, le programme d'ordinateur (quel que
soit le langage dans lequel il est crit) fait abondamment usage d'un
grand nombre de variables de diffrents types.
Noms de variables et mots rservs
Les noms de variables sont des noms quon choisit assez librement
De prfrence assez courts, mais aussi explicites que possible, pour
exprimer clairement ce que la variable est cense contenir :
altitude, altit ou alt (au lieu de x ) pour exprimer une altitude
prix_unit pour exprimer un prix unitaire, etc.
Quelques rgles pour les noms de variables sous Python :

1. Un nom de variable est une squence de lettres (a z , A Z) et de chiffres (0 9), qui doit
toujours commencer par une lettre.

2. Seules les lettres ordinaires sont autorises. Les lettres accentues, les cdilles, les espaces,
les caractres spciaux tels que $, #, @, etc. sont interdits, l'exception du caractre _
(soulign).

3. La casse est significative (les caractres majuscules et minuscules sont distingus).


Attention : Joseph, joseph, JOSEPH sont donc des variables diffrentes. Soyez attentifs !

4. Prenez l'habitude d'crire l'essentiel des noms de variables en caractres minuscules (y


compris la premire lettre). Il s'agit d'une simple convention, mais elle est largement
respecte. N'utilisez les majuscules qu' l'intrieur mme du nom, pour en augmenter
ventuellement la lisibilit, comme dans TableDesMatieres.
Noms de variables et mots rservs

En plus de ces rgles, il faut encore ajouter que vous ne pouvez pas utiliser
comme noms de variables les 29 mots rservs au langage ci-dessous :

and assert break class continue def


del elif else except exec finally
for from global if import in
is lambda not or pass print
raise return try while yield
Affectation (ou assignation)
Nous savons dsormais comment choisir judicieusement un nom de variable.
Voyons prsent comment nous pouvons en dfinir et affecter une valeur.

En Python comme dans de nombreux autres langages, l'opration d'affectation


est reprsente par le signe gal :

>>> n = 7 # donner n la valeur 7

>>> msg = "Quoi de neuf ?" # affecter la valeur "Quoi de neuf ?" msg

>>> pi = 3.14159 # assigner sa valeur la variable pi


Mmoire
@
n 7 en binaire
@
msg quoi de neuf
en binaire
@
Pi 3,14159
en binaire
.
.
.
Afficher la valeur d'une variable

Pour afficher la valeur l'cran, il existe deux possibilits. :

1. La premire consiste entrer au clavier le nom de la variable, puis


<Enter>.

>>> n
7
>>> msg
"Quoi de neuf ? " #affiche les guillemets, donc le type.
>>> pi
3.14159

2. A l'intrieur d'un programme, vous utiliserez toujours l'instruction print :

>>> print msg


Quoi de neuf ? #pas de guillemets.

Pas de Typage explicite des variables sous python


Affectations multiples
Sous Python, on peut assigner une valeur plusieurs variables simultanment.

Exemple :
>>> x = y = 7
>>> x
7
>>> y
7

On peut aussi effectuer des affectations parallles l'aide d'un seul oprateur :

>>> a, b = 4, 8.33
>>> a
4
>>> b
8.33

Dans cet exemple, les variables a et b prennent simultanment les nouvelles valeurs
4 et 8,33.
Exercices

2.1. Dcrivez le plus clairement et le plus compltement possible ce qui se


passe chacune des trois lignes de l'exemple ci-dessous :

>>> largeur = 20
>>> hauteur = 5 * 9.3
>>> largeur * hauteur
930

2.2. Assignez les valeurs respectives 3, 5, 7 trois variables a, b, c.


Effectuez l'opration a - b/c.
Oprateurs et expressions

On manipule les valeurs et les variables qui les rfrencent, en les


combinant avec des oprateurs pour former des expressions.

Exemple :
a, b = 7.3, 12
y = 3*a + b/5

Exercice

Dcrivez ce qui se passe lexcution des lignes suivantes :

>>> r , pi = 12, 3.14159


>>> s = pi * r**2
>>> s
>>> type(r), type(pi), type(s)
>>>

Quelle est, votre avis, l'utilit de la fonction type() ?


Priorit des oprations
PEMDAS pour le mmoriser !
1. P pour parenthses. Ce sont elles qui ont la plus haute priorit. Elles vous
permettent donc de forcer l'valuation d'une expression dans l'ordre que
vous voulez. Ainsi 2*(3-1) = 4 , et (1+1)**(5-2) = 8.

2. E pour exposants. Les exposants sont valus avant les autres


oprations. Ainsi 2**1+1 = 3 (et non 4), et 3*1**10 = 3 (et non 59049 !).

3. M et D pour multiplication et division, qui ont la mme priorit. Elles sont


values avant l'addition A et la soustraction S, lesquelles sont donc
effectues en dernier lieu. Ainsi 2*3-1 = 5 (plutt que 4), et 2/3-1 = -1
(Rappelez-vous que par dfaut Python effectue une division entire).

4. Si deux oprateurs ont la mme priorit, l'valuation est effectue de


gauche droite. Ainsi dans l'expression 59*100/60, la multiplication est
effectue en premier, et la machine doit donc ensuite effectuer 5900/60, ce
qui donne 98. Si la division tait effectue en premier, le rsultat serait 59
(rappelez-vous ici encore qu'il s'agit d'une division entire).
Composition
L'une des grandes forces d'un langage de programmation de haut niveau est qu'il
permet de construire des instructions complexes par assemblage de fragments
divers. Ainsi par exemple, si vous savez comment additionner deux nombres et
comment afficher une valeur, vous pouvez combiner ces deux instructions en une
seule :
>>> type(17 + 3)
<class 'int'>
Cela n'a l'air de rien, mais cette fonctionnalit qui parat si vidente va vous permettre
de programmer des algorithmes complexes de faon claire et concise. Exemple :
>>> h, m, s = 15, 27, 34
>>> "nombre de secondes coules depuis minuit = ", h*3600 + m*60 + s

Ce que vous placez la gauche du signe gale dans une expression doit toujours tre une
variable, et non une expression : le signe gale n'a pas la mme signification qu'en
mathmatique, il s'agit d'un symbole d'affectation
m + 1 = b est incorrect.
Par contre, a = a + 1 est inacceptable en math,
mais correct en programmation
Structures de contrle

Les structures de contrle sont les groupes


d'instructions qui dterminent l'ordre dans lequel les
actions sont effectues dans le programme.

En programmation moderne, il en existe seulement trois :


la squence, la slection que nous allons dcrire dans
ce qui suit, et la rptition.
Squence d'instructions

Sauf mention explicite, les instructions d'un programme s'excutent les


unes aprs les autres, dans l'ordre o elles ont t crites l'intrieur du
programme.
Le chemin dexcution est appel un flux d'instructions, et les constructions
qui le modifient sont appeles des instructions de contrle de flux.
Python excute normalement les instructions de la premire la dernire, sauf
lorsqu'il rencontre une instruction conditionnelle comme l'instruction if. Une
telle instruction va permettre au programme de suivre diffrents chemins
suivant les circonstances.
dbut dexcution

Instruction de contrle du flux

if
circonstance1 circonstance2

fin dexcution
Slection ou excution conditionnelle
Cest une technique permettant d'aiguiller le droulement du programme dans
diffrentes directions, en fonction des circonstances rencontres.
Disposer d'instructions capables de tester une certaine condition et de modifier le
comportement du programme en consquence.

L'instruction if.
>>> a = 150
>>> if (a > 100):
... "a dpasse la centaine"
...
Indentation obligatoire

En interactif :
Frappez encore une fois <Enter>. Le programme s'excute, et vous obtenez :
a dpasse la centaine.
Recommencez le mme exercice, mais avec a = 20 en guise de premire ligne : cette fois Python
n'affiche plus rien du tout.
Slection ou excution conditionnelle

>>> a = 20
>>> if (a > 100):
... "a dpasse la centaine"
... else:
... "a ne dpasse pas cent"
...

En interactif :
Frappez <Enter> encore une fois. Le programme s'excute, et affiche cette fois :
a ne dpasse pas cent.

Comme vous l'aurez certainement dj compris, l'instruction else ( sinon , en anglais)


permet de programmer une excution alternative, dans laquelle le programme doit
choisir entre deux possibilits
Slection ou excution conditionnelle

On peut faire mieux encore en utilisant aussi l'instruction elif (contraction


de else if ) :

a=0
if a > 0 :
" a est positif "
elif a < 0 :
"a est ngatif"
else:
"a est nul"
Oprateurs de comparaison
La condition value aprs l'instruction if peut contenir les oprateurs de
comparaison suivants :
x == y # x est gal y (deux signes gale et non d'un seul)
x != y # x est diffrent de y
x>y # x est plus grand que y
x<y # x est plus petit que y
x >= y # x est plus grand que, ou gal y
x <= y # x est plus petit que, ou gal y

Exemple :
>>> a = 7
>>> if (a % 2 == 0):
... "a est pair"
... "parce que le reste de sa division par 2 est nul"
... else:
... "a est impair"
...

Mme symbolisme quen C++ et en Java


Instructions composes Blocs d'instructions
L'instruction if est votre premier exemple d'instruction compose
Sous Python, toutes les instructions composes ont toujours la mme structure :
une ligne d'en-tte termine par un double point, suivie d'une ou de plusieurs
instructions indentes sous cette ligne d'en-tte.

Exemple :
Ligne d'en-tte:
premire instruction du bloc
... ...
... ...
dernire instruction du bloc

S'il y a plusieurs instructions indentes sous la ligne d'en-tte, elles doivent l'tre
exactement au mme niveau (comptez un dcalage de 4 caractres, par exemple).
Ces instructions indentes constituent ce que nous appellerons dsormais un bloc
d'instructions.
Instructions imbriques
Il est parfaitement possible d'imbriquer les unes dans les autres plusieurs
instructions composes, de manire raliser des structures de dcision
complexes.

Exemple :
if embranchement == "vertbrs": # 1
if classe == "mammifres": # 2
if ordre == "carnivores": # 3
if famille == "flins": # 4
"c'est peut-tre un chat" # 5
"c'est en tous cas un mammifre" # 6
elif classe == 'oiseaux': # 7
"c'est peut-tre un canari" # 8
"la classification des animaux est complexe" # 9

Ce programme n'imprime la phrase c'est peut-tre un chat que dans le cas o les quatres premires
conditions testes sont vraies.

Pour que la phrase c'est peut-tre un canari soit affiche, il faut que la variable embranchement contienne
vertbrs , et que la variable classe contienne oiseaux .
Quelques rgles de syntaxe Python

Les limites des instructions et des blocs sont dfinies par la mise en page
Avec Python, vous devez utiliser les sauts la ligne et l'indentation. Python vous force donc crire du code
lisible, et prendre de bonnes habitudes que vous conserverez lorsque vous utiliserez d'autres langages.

Instruction compose = En-tte , double point , bloc d'instructions indent

Les blocs d'instructions sont toujours associs une ligne d'en-


tte contenant une instruction bien spcifique (if, elif, else, while,
def, ...) se terminant par un double point

Les espaces et les commentaires sont normalement ignors


Instructions rptitives.
R-affectation
Permet de remplacer l'ancienne valeur d'une variable par une nouvelle

>>> altitude = 320


>>> altitude
320
>>> altitude = 375
>>> altitude
375

Rappels sur laffectation :


L'galit est commutative, alors que l'affectation ne l'est pas.
Les critures a = 7 et 7 = a sont quivalentes, alors qu'une instruction de programmation telle
que 375 = altitude serait illgale.
l'galit est permanente, alors que l'affectation ne lest pas.

>>> a = 5
>>> b = a # a et b contiennent des valeurs gales
>>> b = 2 # a et b sont maintenant diffrentes
Instructions rptitives
Exercice

Rappelons ici que Python permet d'affecter leurs valeurs plusieurs variables simultanment :
>>> a, b, c, d = 3, 4, 5, 7

Supposons par exemple que nous voulions maintenant changer les valeurs
des variables a et c. (Actuellement, a contient la valeur 3, et c la valeur 5.
Nous voudrions que ce soit l'inverse). Comment faire ?
4.1. crivez les lignes d'instructions ncessaires pour obtenir ce rsultat sous
python.
Rptitions en boucle - l'instruction while

L'une des tches que les machines font le mieux est la rptition sans erreur de tches identiques !

Une des mthodes pour programmer ces tches


rptitives est construite autour de l'instruction while.
1. Entrer les commandes ci-dessous
>>> a = 0
>>> while (a < 7): # (n'oubliez pas le double point !)
... a = a + 1 # (n'oubliez pas l'indentation !)
... a

2. Frappez sur <Enter>

3. Que se passe-t-il ?
Rptitions en boucle - l'instruction while

>>> a = 0
>>> while (a < 7): # (n'oubliez pas le double point !)
... a = a + 1 # (n'oubliez pas l'indentation !)
...a

Commentaires
1. Dans notre exemple, si la condition a < 7 est encore vraie, le corps de la boucle est excut une
nouvelle fois et le bouclage se poursuit.
2. La variable value dans la condition doit exister au pralable (Il faut qu'on lui ait dj affect au moins une valeur)
3. Si la condition est fausse au dpart, le corps de la boucle n'est jamais excut
4. Si la condition reste toujours vraie, alors le corps de la boucle est rpt indfiniment.

Exemple de boucle sans fin ( viter) :


>>> n = 3
>>> while n < 5:
... "hello !"
Exercices

1. crivez un programme qui affiche les 20 premiers termes de la table de


multiplication par 7

2. crivez un programme qui affiche une table de conversion de sommes


d'argent exprimes en euros, en dollars canadiens. La progression des
sommes de la table sera gomtrique , comme dans l'exemple
ci-dessous :
1 euro(s) = 1.65 dollar(s)
2 euro(s) = 3.30 dollar(s)
4 euro(s) = 6.60 dollar(s)
8 euro(s) = 13.20 dollar(s)

etc. (S'arrter 16384 euros)

3. crivez un programme qui affiche une suite de 12 nombres dont chaque


terme soit gal au triple du terme prcdent.
Premiers scripts, ou : Comment conserver nos programmes ?

Linconvnient dune programmation interactive : toutes les squences d'instructions crites disparaissent
irrmdiablement ds que vous fermez l'interprteur.

La sauvegarde de vos programmes dans des fichiers donne la possibilit de les retravailler par tapes
successives, de les transfrer sur d'autres machines, etc..
(Votre programme : Rdaction de vos squences d'instructions dans un diteur de textes, par exemple XEmacs, o il vous est
trs fortement recommand d'expliciter vos scripts le mieux possible, en y incorporant de nombreux commentaires.

Fichier nomm MonScript.py

Pour que ce script s'excute, il suffira d'entrer la commande suivante dans une fentre
de terminal :
python MonScript
Exercices
1. Ecrivez un programme qui calcule le volume d'un paralllpipde rectangle dont sont
fournis au dpart la largeur, la hauteur et la profondeur.

2. Ecrivez un programme qui convertisse un nombre entier de secondes fourni au dpart,


en un nombre d'annes, de mois, de jours, de minutes et de secondes. (Utilisez
l'oprateur modulo : % ).

3. Ecrivez un programme qui affiche les 20 premiers termes de la table de multiplication


par 7, en signalant au passage ( l'aide d'une astrisque) ceux qui sont des multiples
de 3. Exemple : 7 14 21 * 28 35 42 * 49

4. Ecrivez un programme qui calcule les 50 premiers termes de la table de multiplication


par 13, mais n'affiche que ceux qui sont des multiples de 7.

5. Ecrivez un programme qui affiche la suite de symboles suivante :


*
**
***
****
*****
******
*******
Principaux types de donnes

1. Donnes numriques
entiers (int ou long)
Modifions donc lgrement l'exercice, de manire afficher aussi le
type de la variable principale :
Fibonacci

>>> a, b, c = 1, 1, 1
>>> while c < 49:
print c, " : ", b, type(b)
a, b, c = b, a+b, c+1
...
...
... (affichage des 43 premiers termes)
...
44 : 1134903170 <type 'int'>
45 : 1836311903 <type 'int'>
46 : 2971215073 <type 'long'>
47 : 4807526976 <type 'long'>
48 : 7778742049 <type 'long'>
Principaux types de donnes
1. Donnes numriques:
rels ou virgules flottantes (float)
Par exemple, les donnes :
3.14 10. .001 1e100 3.14e-10
Essayons ce type de donnes dans un nouveau petit programme
(inspir du prcdent) :
Factoriel

>>> a, b, c = 1., 2., 1 # => a et b seront du type 'float'


>>> while c <18:
... a, b, c = b, b*a, c+1
... print b

Le type float permet de manipuler des nombres (>0 ou <0) compris entre 10^-308 et
10^308 avec une prcision de 12 chiffres significatifs. Ils sont encods d'une manire
particulire sur 8 octets (64 bits) dans la mmoire : une partie correspond aux 12
chiffres significatifs, et une autre l'ordre de grandeur (exposant de 10).
Principaux types de donnes
2. Les donnes alphanumriques
Le type string (chane de caractres)
Un programme d'ordinateur peut galement traiter des caractres alphabtiques,
des mots, des phrases, ou des suites de symboles quelconques.
Une donne de type string est une suite quelconque de caractres dlimite soit
par des apostrophes (simple quotes), soit par des guillemets (double quotes).

Exemple:
>>> phrase1 = 'les oeufs durs.'
>>> phrase2 = '"Oui", rpondit-il,'
>>> phrase3 = "j'aime bien"
>>> print phrase2, phrase3, phrase1
"Oui", rpondit-il, j'aime bien les oeufs durs.

Les 3 variables phrase1, phrase2, phrase3 sont donc des variables de type string

Remarques :
La squence \n dans une chane provoque un saut la ligne.
La squence \' permet d'insrer une apostrophe dans une chane dlimite par
des apostrophes
Accs aux caractres individuels d'une chane
Chanes de caractres <=> Donnes composites
Dans le cas d'une chane de caractres, ses entits plus
simples sont videmment les caractres eux-mmes.

Python est pourvu de mcanismes qui permettent d'accder sparment


chacun des caractres d'une chane

Exemple :
>>> ch = "Stphanie"
>>> print ch[0], ch[3]
Sp
Oprations lmentaires sur les chanes
De nombreuses fonctions intgres Python, permettent d'effectuer divers
traitements sur les chanes de caractres.
concatnation
a = 'Petit poisson'
b = ' deviendra grand'
c=a+b
print c
petit poisson deviendra grand

len()
>>> print len(c)
29
Conversion en nombre dune chane de caractres qui reprsente un nombre
>>> ch = '8647'
>>> print ch + 45
==> *** erreur *** on ne peut pas additionner une chane et un nombre
>>> n = int(ch)
>>> print n + 65
8712 # OK : on peut additionner 2 nombres
Exercices
1. crivez un script qui dtermine si une chane contient ou non le caractre
e.

2. crivez un script qui compte le nombre d'occurrences du caractre e


dans une chane.

3. crivez un script qui recopie une chane dans une nouvelle variable, en
insrant des astrisques entre les caractres.
Ainsi par exemple, gaston devra devenir g*a*s*t*o*n

4. crivez un script qui recopie une chane (dans une nouvelle variable) en
l'inversant. Ainsi par exemple, zorglub deviendra bulgroz .

5. En partant de l'exercice prcdent, crivez un script qui dtermine si une


chane de caractres donne est un palindrome (c'est--dire une chane
qui peut se lire indiffremment dans les deux sens), comme par exemple
radar ou s.o.s .
Les listes
Encore des donnes composites
Sous Python, on peut dfinir une liste comme une collection d'lments spars
par des virgules, l'ensemble tant enferm dans des crochets.

Exemple :
>>> jour = ['lundi', 'mardi', 'mercredi', 1800, 20.357, 'jeudi','vendredi']
>>> print jour
['lundi', 'mardi', 'mercredi', 1800, 20.357, 'jeudi', 'vendredi']

Comme les chanes de caractres, les listes sont des squences, c'est--
dire des collections ordonnes d'objets. On peut accder chacun d'entre
eux individuellement si l'on connat son index dans la liste

Exemple :
>>> jour = ['lundi', 'mardi', 'mercredi', 1800, 20.357, 'jeudi', 'vendredi']
>>> print jour[2]
mercredi
>>> print jour[4]
20.357
Les listes Fonctions intgres

On peut donc remplacer certains lments d'une liste par d'autres, comme ci-
dessous :

>>> jour[3] = 'Juillet'


>>> print jour
['lundi', 'mardi', 'mercredi', 'Juillet', 20.357, 'jeudi', 'vendredi']

La fonction intgre len() , que nous avons dj rencontre propos des


chanes, s'applique aussi aux listes. Elle renvoie le nombre d'lments prsents
dans la liste :
>>> len(jour)
7
Une autre fonction intgre permet de supprimer d'une liste un lment
quelconque ( partir de son index). Il s'agit de la fonction del() :

>>> del(jour[4])
>>> print jour
['lundi', 'mardi', 'mercredi', 'juillet',
'jeudi', 'vendredi']
Les listes

Fonctions intgres

Il est galement tout fait possible d'ajouter un lment une liste, mais pour ce
faire, il faut considrer que la liste est un objet

>>> jour.append('samedi')
>>> print jour
['lundi', 'mardi', 'mercredi', 'juillet', 'jeudi', 'vendredi', 'samedi']
>>>

Par exemple analyser le petit script ci-dessous et commenter son fonctionnement :

jour = ['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi']
a, b = 0, 0
while a<25:
a=a+1
b=a%7
print a, jour[b]
Exercices
1. Soient les listes suivantes :
t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
t2 = ['Janvier', 'Fvrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aot', 'Septembre', 'Octobre', 'Novembre',
'Dcembre']
crivez un petit programme qui cre une nouvelle liste t3. Celle-ci devra contenir tous les lments des
deux listes en les alternant, de telle manire que chaque nom de mois soit
suivi du nombre de jours correspondant : ['Janvier',31,'Fvrier',28,'Mars',31, etc...].

2. crivez un programme qui affiche proprement tous les lments d'une liste. Si on l'appliquait par
exemple la liste t2 de l'exercice ci-dessus, on devrait obtenir : Janvier Fvrier Mars Avril Mai Juin Juillet
Aot Septembre Octobre Novembre Dcembre

3. crivez un programme qui recherche le plus grand lment prsent dans une liste donne.
Par exemple, si on l'appliquait la liste [32, 5, 12, 8, 3, 75, 2, 15], ce programme devrait afficher :
le plus grand lment de cette liste a la valeur 75.

4. crivez un programme qui analyse un par un tous les lments d'une liste de nombres (par exemple celle
de l'exercice prcdent) pour gnrer deux nouvelles listes. L'une contiendra seulement les nombres pairs
de la liste initiale, et l'autre les nombres impairs. Par exemple, si la liste initiale est celle de l'exercice
prcdent, le programme devra construire une liste pairs qui contiendra [32, 12, 8, 2], et une liste impairs
qui contiendra [5, 3, 75,15].
Astuce : pensez utiliser l'oprateur modulo (%) dj cit prcdemment.

5. crivez un programme qui analyse un par un tous les lments d'une liste de mots (par exemple : ['Jean',
'Maximilien', 'Brigitte', 'Sonia', 'Jean-Pierre', 'Sandra'] pour gnrer deux nouvelles listes. L'une contiendra
les mots comportant moins de 6 caractres, l'autre les mots comportant 6 caractres ou davantage.
Fonctions prdfinies
Les fonctions permettent de dcomposer un programme complexe en une srie de
sous-programmes plus simples, lesquels peuvent leur tour tre dcomposs eux-
mmes en fragments plus petits, et ainsi de suite

Par exemple si nous disposons d'une fonction capable de


calculer une racine carre, nous pouvons l'utiliser un peu partout
dans nos programmes sans avoir la r-crire chaque fois.

La fonction intgre input() provoque une interruption dans le programme courant.


L'utilisateur est invit entrer des caractres au clavier et terminer avec <Enter>
On peut linvoquer en laissant les parenthses vides. On peut aussi y placer en
argument un message explicatif destin l'utilisateur.

print 'Veuillez entrer un nombre positif quelconque : '


nn = input()
print 'Le carr de', nn, 'vaut', nn**2

ou encore :
prenom = input('Entrez votre prnom (entre guillemets) : )
print 'Bonjour,', prenom
Fonctions prdfinies
Remarques importantes

La fonction input() renvoie une valeur dont le type correspondant ce que


l'utilisateur a entr.
Un bon script doit toujours vrifier si le type ainsi entr correspond bien ce
que l'on attend pour la suite du programme.
Il est souvent prfrable d'utiliser dans vos scripts la fonction similaire
raw_input(), laquelle renvoie toujours une chane de caractres.
Convertir ensuite cette chane en nombre l'aide de int() ou de float().

>>> a = raw_input('Entrez une donne : ')


Entrez une donne : 52.37
>>> type(a)
<type 'str'>
>>> b = float(a) # conversion en valeur numrique
>>> type(b)
<type 'float'>
Exercices

crivez un programme qui permette d'encoder des valeurs dans une


liste. Ce programme devrait fonctionner en boucle, l'utilisateur tant
invit entrer sans cesse de nouvelles valeurs, jusqu' ce qu'il dcide
de terminer en frappant <enter> en guise d'entre. Le programme se
terminerait alors par l'affichage de la liste.

Exemple de fonctionnement :

Veuillez entrer une valeur : 25


Veuillez entrer une valeur : 18
Veuillez entrer une valeur : 6284
Veuillez entrer une valeur :
[25, 18, 6284]
Vracit/fausset d'une expression
a = input('Entrez une valeur quelconque')
if a:
print "vrai"
else:
print "faux"
Le petit script ci-dessus n'affiche faux que si vous entrez la valeur
0. Pour toute autre valeur numrique, vous obtiendrez vrai .
a = input('entrez une valeur numrique : ')
b = (a < 5)
print 'la valeur de b est', b, ':'
if b:
print "la condition b est vraie"
else:
print "la condition b est fausse"

Le script ci-dessus vous renvoie une valeur b = 1 (condition vraie) si vous


avez entr un nombre plus petit que 5. La condition a > 5 , est d'abord
convertie par l'ordinateur en une valeur numrique. (i.e., 1 si l'expression
est vraie, et zro si l'expression est fausse).
Exercices

1. Soit la liste suivante :


['Jean-Michel', 'Marc', 'Vanessa', 'Anne', Maximilien', 'Alexandre-Benot',
'Louise']
Ecrivez un script qui affiche chacun de ces noms avec le nombre de
caractres correspondant.

2. crire une boucle de programme qui demande l'utilisateur d'entrer des


notes d'lves. La boucle se terminera seulement si l'utilisateur entre une
valeur ngative. Avec les notes ainsi entres, construire progressivement
une liste. Aprs chaque entre d'une nouvelle note (et donc chaque
itration de la boucle), afficher le nombre de notes
Dfinir une fonction
Il arrivera souvent qu'une mme squence d'instructions doive tre utilise
plusieurs reprises dans un programme, et on souhaitera bien videmment ne
pas avoir la reproduire systmatiquement.

Nous avons vu diverses fonctions pr-programmes. Voyons prsent


comment en dfinir nous-mmes de nouvelles. La syntaxe Python pour la
dfinition d'une fonction est la suivante:
def nomDeLaFonction(liste de paramtres):
...
bloc d'instructions
...
Fonction simple sans paramtres

>>> def table7():


... n=1
... while n <11 :
... print n * 7,
... n = n+1

Pour utiliser la fonction que nous venons de dfinir, il suffit de l'appeler par
son nom. Ainsi :

>>> table7()

Provoque l'affichage de :

7 14 21 28 35 42 49 56 63 70
Pourquoi dfinir une fonction ?

1. Crer une nouvelle fonction vous offre l'opportunit de donner un nom


tout un ensemble d'instructions. De cette manire, vous pouvez simplifier
le corps principal d'un programme, en dissimulant un algorithme
secondaire complexe sous une commande unique, laquelle vous
pouvez donner un nom trs explicite, en franais si vous voulez.

2. Crer une nouvelle fonction peut servir raccourcir un programme, par


limination des portions de code qui se rptent. Par exemple, si vous
devez afficher la table par 7 plusieurs fois dans un mme programme,
vous n'avez pas rcrire chaque fois l'algorithme qui accomplit ce
travail.

3. Une fonction est donc en quelque sorte une nouvelle instruction


personnalise, que vous ajoutez vous-mme librement votre langage
de programmation.
Fonction avec paramtres

La fonction table() telle que dfinie ci-dessous utilise le paramtre base


pour calculer les dix premiers termes de la table de multiplication de base.

>>> def table(base):


n=1
while n <11 :
print n * base,
n = n +1

Pour tester cette nouvelle fonction, il nous suffit de l'appeler avec un


argument.
>>> table(13)
13 26 39 52 65 78 91 104 117 130
>>> table(9)
9 18 27 36 45 54 63 72 81 90
Fonction avec plusieurs paramtres
La fonction table() est certainement intressante, mais elle n'affiche toujours que les dix
premiers termes de la table de multiplication, alors que nous pourrions souhaiter qu'elle en
affiche d'autres. Nous allons l'amliorer en lui ajoutant des paramtres supplmentaires,
dans une nouvelle version que nous appellerons cette fois tableMulti() :

>>> def tableMulti(base, debut, fin):


print 'Fragment de la table de multiplication par', base, ':
n = debut
while n <= fin :
print n, 'x', base, '=', n * base
n = n +1
Cette nouvelle fonction utilise donc trois paramtres : la base de la table comme dans l'exemple
prcdent, l'indice du premier terme afficher, l'indice du dernier terme afficher.
Essayons cette fonction en entrant par exemple :
>>> tableMulti(8, 13, 17)
Fragment de la table de multiplication par 8 :
13 x 8 = 104
14 x 8 = 112
15 x 8 = 120
16 x 8 = 128
17 x 8 = 136
Utilisation des fonctions dans un script
Les fonctions peuvent aussi s'utiliser dans des scripts. Veuillez essayer
vous-mme le petit programme ci-dessous, lequel calcule le volume
d'une sphre l'aide de la formule : V= 4/3* pi*r^3

def cube(n):
return n**3
def volumeSphere(r):
return 4 * 3.1416 * cube(r) / 3
r = input('Entrez la valeur du rayon : ')
print 'Le volume de cette sphre vaut', volumeSphere(r)

Ce programme comporte trois parties : les deux fonctions cube() et


volumeSphere(), et ensuite le corps principal du programme.
Dans le corps principal du programme, il y a un appel de la fonction
volumeSphere().
A l'intrieur de la fonction volumeSphere(), il y a un appel de la fonction
cube().
Exercices
1. Dfinissez une fonction compteCar(ca,ch) qui renvoie le nombre de fois
que l'on rencontre le caractre ca dans la chane de caractres ch. Par
exemple, l'excution de l'instruction :
print compteCar('e','Cette phrase est un exemple') doit donner le
rsultat : 7
2. Dfinissez une fonction indexMax(liste) qui renvoie l'index de l'lment
ayant la valeur la plus leve dans la liste transmise en argument.
Exemple d'utilisation :
serie = [5, 8, 2, 1, 9, 3, 6, 7]
print indexMax(serie)
4
3. Dfinissez une fonction nomMois(n) qui renvoie le nom du nime mois
de l'anne. Par exemple, l'excution de l'instruction :
print nomMois(4) doit donner le rsultat : Avril
4. Dfinissez une fonction inverse(ch) qui permette d'inverser l'ordre des
caractres d'une chane quelconque. (La chane inverse sera renvoye
au programme appelant).
5. Dfinissez une fonction compteMots(ph) qui renvoie le nombre de mots
contenus dans la phrase ph (On considre comme mots les ensembles
de caractres inclus entre des espaces).
Exercices

Dfinissez une fonction changeCar(ch,ca1,ca2,debut,fin) qui remplace tous les


caractres ca1 par des caractres ca2 dans la chane de caractres ch, partir de
l'indice debut et jusqu' l'indice fin. Exemples de la fonctionnalit attendue :
>>> phrase = 'Ceci est une toute petite phrase.'
>>> print changeCar(phrase, ' ', '*', 8, 12)
Ceci est*une*toute petite phrase.

Dfinissez une fonction eleMax(liste,debut,fin) qui renvoie l'lment ayant


la plus grande valeur dans la liste transmise. Les deux arguments debut
et fin indiqueront les indices entre lesquels doit s'exercer la recherche.

You might also like