Академический Документы
Профессиональный Документы
Культура Документы
Bases de la programmation :
Cours
1re anne
IUT de Villetaneuse.
Hanne Azzag,
Frdrique Bassino,
Pierre Grard,
Bouchab Khafif,
Mathieu Lacroix,
Mustapha Lebbah,
Franois Lvy,
Guillaume Santini.
28 fvrier 2012
IUT de Villetaneuse
Bases de la programmation
2
1re anne
Chapitre 1
Squentialit et variables
1.1
Introduction
Un ordinateur est une machine et en tant que telle, elle ne fait que ce quon lui demande. Les
programmeurs ont pour tche de faire faire ces machines exactement ce quils veulent quelles
fassent et dans le bon ordre ni plus, ni moins, ni autre chose. Donner un ordinateur une squence
dordres effectuer, cest crire un programme quil devra excuter.
Les problmes rsoudre tant parfois complexes, la tche principale est dcompose en plusieurs sous-problmes plus simples rsolus les uns aprs les autres. En dfinitive, pour rsoudre un
problme, le programmeur conoit une srie dinstructions, chacune donnant un ordre lordinateur.
Linstruction print(1), par exemple, correspond lordre donn lordinateur dafficher 1
lcran. Il sagit dun ordre simple, mais qui peut tre combin dautres pour produire des
rsultats (un peu) plus complexes. Par exemple, cette instruction suivie de print(2) forme un
programme avec deux instructions (dans le cercle : les numros de ligne du programme) :
1
2
1
2
1
2
print(1)
print(2)
qui affichera 1 puis affichera 2.
Cet exemple est videmment simplisme et peut paratre trs loign des programmes que lutilisateur contemporain utilise habituellement. Mais mme pour raliser des applications complexes
(animation et rendu 3D, par exemple), ce sont toujours les mmes principes simples qui sont
luvre.
Au lieu dinstructions qui se contentent dafficher un nombre lcran, on utilisera des instructions toujours aussi simples crire, mais dont les effets seront plus spectaculaires. Le travail du
programmeur nest pas plus complexe pour autant. Ainsi, au lieu de
print(1)
print(2)
On aura des instructions comme
IUT de Villetaneuse
dont limpact visuel sera bien plus important, mais dont la complexit pour le programmeur reste
comparable.
Construire des programmes informatiques, cest toujours se demander quelles instructions excuter, et dans quel ordre.
1.2
Squences dinstructions
Un programme est une srie dinstructions effectues une par une, de la premire la dernire,
en squence. Chaque instruction est un ordre simple donn lordinateur.
Chaque programme commence par excuter sa premire instruction. Ce nest que lorsquelle
est termine quil passe la seconde. Sil y a une troisime instruction, il attend davoir termin
la deuxime pour lexcuter.
I Sur ce thme : Exercice 1, TD1
1.3
1.3.1
Variables
Noms de variables
Les instructions dun programme permettent de traiter des donnes (quantit de vie restante,
age dun client, nombre de munitions, etc.) qui doivent pouvoir tre ajustes au fur et mesure que
le programme se droule. Lodinateur stocke donc chacune de ces informations dans sa mmoire
un endroit bien identifi, grce des variables. On utilise le terme variables parce que ces donnes
sont susceptibles dtre modifies, par opposition des constantes).
Les variables associent un nom une valeur. Une variable nomme x peut par exemple prendre
la valeur 1. Chaque variable mobilise un espace mmoire accessible par un nom, et qui peut contenir
une valeur. La valeur dune variable peut tre change au cours de lexcution dun programme.
Selon la syntaxe utilise dans ce cours, le nom dune variable commence par une lettre minuscule
(a z) ou majuscule (A Z), ou bien par le caractre soulign (_). Pour la suite de son nom,
on peut utiliser des lettres minuscules ou majuscules, des souligns et des chiffres (0 9). Le nom
dune variable ne contient donc pas despace.
I Sur ce thme : Exercice 2, TD1
1.3.2
Affectation
Lopration principale mettant en uvre les variables est laffectation, qui permet de changer
la valeur dune variable en utilisant son nom. Une affectation est note avec le signe = . A
gauche du signe = , on place le nom de la variable dont on veut changer la valeur, et droite on
dfinit la valeur que doit prendre la variable. Ce symbole nest pas du tout lgalit mathmatique.
Par exemple, linstruction
x=2
change la valeur de x. Notez bien que 2=x est incorrect. 2 est un nombre constant et ne change
pas de valeur. Ce nest pas une variable et on ne peut donc pas le mettre gauche de loprateur
daffectation.
Dans cet exemple, la nouvelle valeur est directement spcifie. On aurait galement pu placer
droite du symbole = une expression qui reprsente un calcul, comme par exemple dans
x=1+2
Bases de la programmation
4
1re anne
Departement informatique
calcule dabord la valeur de lexpression (1+2)/3 avant daffecter le rsultat du calcul la variable
nomme x, qui prend finalement la valeur 1.
1.3.3
Dans lvaluation dune expression, un nom de variable est remplac par sa valeur. Si x vaut
2, par exemple, alors (x*3) vaut 6. Ainsi, lissue des deux instructions conscutives suivantes :
1
2
x=2
y=x*3
x vaut 2 et y vaut 6.
Cette valuation des variables grce leur valeur vaut galement pour les sorties cran. Linstruction print(1+2) est correcte, mais print(x+y) lest galement, et donnera le mme rsultat
si par exemple x et y valent respectivement 1 et 2 juste avant son excution.
I Sur ce thme : Exercice 3, TD1
Il est important de noter quune variable ne peut tre utilise que si elle a t dfinie plus haut.
Ainsi, le programme suivant est correct :
1
2
3
1
2
3
1
2
3
4
x = 0
y = 2
print((x+y)+2)
alors que le suivant le lest pas
x = 1
z = x+y
print(z)
parce qu la deuxime instruction, la variable y navait pas encore t dfinie. Selon le principe
de squentialit, ajouter une ligne la fin comme dans le le programme suivant :
x = 1
z = x+y
print(z)
y = 3
1re anne
5
Bases de la programmation
IUT de Villetaneuse
1.4
1.4.1
Il faut tre trs vigilant quand au type des nombres quand on applique les oprateurs ci-dessus :
si une opration implique deux nombres de mme type, alors le rsultat reste du mme type. Si
une opration implique la fois une valeur de type int et une autre de type float, alors le rsultat
sera de type float (float absorbe int). Notons en particulier que le rsultat de la division
de deux nombres entiers ne donne pas un float. Typiquement, 3/2 vaut 1 et pas 1.5.
1.4.2
Jusquici, toutes les donnes saisies, calcules et affiches taient numriques. Il existe en fait
dautres types de donnes comme par exemple les chanes de caractres ( string en anglais).
Par exemple, le programme
1
print(hello world)
affiche hello world lcran (sans les guillemets), hello world tant une chane de caractres
alpha-numriques.
Les valeurs des chanes de caractres sont dfinies entre simples quotes (apostrophes).
Attention, chaque caractre compte, ainsi que la casse (majuscules/minuscules). Ainsi, les chanes
de caractres suivantes sont toutes diffrentes les unes des autres :
Bases de la programmation
6
1re anne
Departement informatique
HelloWorld
Hello World
hello world
helo world
halo world
halo 1 world 2
On peut dfinir des variables de type chanes de caractres de la mme manire que celles de
type numrique. Ainsi, le programme suivant :
1
2
dfinit une variable de nom str de type chane de caractres, pour ensuite lafficher.
La chane de caractres vide (sans un seul caractre dedans) se note par deux simples quotes
accoles . Par exemple, str = dfinit une chane de caractres et lui donne la valeur dune
chane vide. Attention, il sagit bien ici de deux simples quotes (deux apostrophes la suite), et
pas dune double quote (guillemets anglais).
Il est possible dappliquer quelques oprations sur les chanes de caractres. Ces oprations
sont rsumes dans le tableau suivant :
Expression
s + t
len(s)
lower(s)
upper(s)
Notez que certaines oprations peuvent tre interprtes diffremment selon le type des donnes auxquelles elles sappliquent. Cest par exemple le cas de loprateur + . Ainsi print(1+2)
affichera 3 (le + tant interprt comme une somme de deux nombres), alors que print(hello
+ world) affichera helloworld (le + tant interprt comme une opration de concatnation
de deux chanes de caractres ).
Si loprateur + peut tre utilis pour des nombres ou des chanes de caractres, il nest par
contre pas possible dutiliser les deux la fois. En effet, on ne peut pas additionner un nombre
avec une chane de caractres.
1.4.3
Rsultat
val est transfome en un nombre de type int
val est transfome en un nombre de type float
val est transfome en une chane de caractres
Le tableau suivant indique alors les rsultats des oprations de conversion int(val), float(val)
et str(val) sur une variable val. La valeur de val avant conversion (et donc son type) est donne
la premire ligne.
1re anne
7
Bases de la programmation
IUT de Villetaneuse
valeur de val
int(val)
float(val)
str(val)
10
10
10.0
10
2.5
2
2.5
2.5
2
2
2.0
2
2.5
ERREUR
2.5
2.5
12a34
ERREUR
ERREUR
On remarque que lopration int(val) supprime ce qui se trouve aprs la virgule si val est
de type float. Ceci revient alors prendre la partie entire infrieure de la variable val.
On remarque aussi que les oprations int(val) et float(val) gnrent une erreur si val est
une chane de caractres qui ne correspond pas un entier ou un nombre virgule, respectivement.
I Sur ce thme : Exercice 7, TD1
I Sur ce thme : Exercice 8, TD1
I Sur ce thme : Exercice 9, TD1
1.5
Entres / sorties
La fonction print() permet dafficher une valeur connue lcran. Elle permet dafficher
indiffremment des nombres ou des chanes de caractres. Cest une fonction qui ralise une sortie
car elle fait sortir des valeurs de lordinateur vers lutilisateur.
Il existe galement des fonctions dentre qui permettent dentrer des valeurs dans lordinateur.
La plus simple est raw_input() qui sutilise droite dun oprateur daffectation = . Par
exemple, le programme suivant demande une chane de caractres lutilisateur puis laffiche :
1
2
1
2
3
4
5
6
z = raw_input()
print(z)
La premire instruction est une affectation. Le programme va donc en premier lieu chercher
valuer la valeur de ce qui est droite du signe = . Pour ce faire, lordinateur invite lutilisateur
saisir une valeur au clavier. Une pression de la touche Entre validera sa saisie et celle-ci sera
prise en compte par lordinateur.
Notons bien que la fonction raw_input() permet uniquement de saisir des chanes de caractres. Si on veut saisir un nombre, il convient de procder en deux temps : procder dabord
la saisie dune chane de caractre, puis la convertir en un nombre.
I Sur ce thme : Exercice 10, TD1
I Sur ce thme : Exercice 11, TD1
Le programme suivant permet de demander lutilisateur les deux cts dun rectangle, et
den calculer la surface avant de lafficher :
print(Quelle est la longueur du premier ct ?)
cote1 = float(raw_input())
print(Quelle est la longueur du deuxime ct ?)
cote2 = float(raw_input())
surface = cote1 * cote2
print(La surface du rectangle ainsi form est + str(surface))
Lutilisation de variables pour stocker les longueurs des cts saisies permet ici dcrire un programme gnrique permettant de calculer la surface de nimporte quel rectangle.
I Sur ce thme : Exercice 12, TD1
I Sur ce thme : Exercice 13, TD1
I Sur ce thme : Exercice 14, TD1
Bases de la programmation
8
1re anne
Departement informatique
1
2
3
print(1)
print(2)
print(3)
print(2)
print(1)
print(3)
Avec les mmes instructions, ces deux programmes ne font pas la mme chose. Tous les programmes excutent donc en premier les premires instructions : ils se droulent du haut vers
le bas.
toto = 4
print(toto)
toto = 5 + 5
print(toto)
tata = toto + 4
print(tata)
tata = tata + 5
print(toto)
tata = tata + (toto*2)
print(tata)
Pour rpondre la question, dessiner les cases mmoire chaque tape de lexcution du programme.
9
Bases de la programmation
IUT de Villetaneuse
1
2
3
4
5
6
a=1
b=2
a=b
b=a
print(a)
print(b)
1
2
3
4
5
6
a=1
b=2
b=a
a=b
print(a)
print(b)
a
b
c
d
c
a
a
=
=
=
=
=
=
=
1.0
2
a + 1
b + 3
float(d)
c / b
int(c) / b
cp = 93
nom = Seine Saint-Denis
phrase = ?????
print(phrase)
Que mettre la place des ? ? ? ? ? pour que le programme affiche Le code postal de la Seine
Saint-Denis est 93 ?
10
1re anne
Departement informatique
1
2
3
4
a = raw_input()
b = raw_input()
c = a+b
print(c)
Quels sont les types de a, b et c ?
Que faut-il modifier ce programme pour que ce soit le primtre qui soit calcul ?
1re anne
11
Bases de la programmation
IUT de Villetaneuse
12
1re anne
Departement informatique
File
Edit
View
Start
Debug
Help
Aprs avoir interprt et excut linstruction prcdente, le triple chevron est nouveau
prsent pour vous inviter taper une seconde instruction.
Attention : quand vous donnez des instructions lordinateur, il convient de respecter la
syntaxe. Chaque caractre compte :
prunt au lieu de print ne fonctionnera pas
ouvrir une parenthse sans la fermer provoquera une erreur
oublier des simples quotes nest pas correct
...
Question 16.2 : Faites volontairement lerreur doublier la seconde simple quote terminant la
chane de caractres. Vous obtenez un message derreur et linterprteur affichera ce qui suit.
Il y a diffrents types derreur, lerreur de syntaxe (SyntaxError) est la plus courante, et rsulte
de fautes de frappe. Confronts une erreur, lisez toujours le message retourn par linterprteur,
il vous donnera de prcieux indices pour la rsolution du problme.
1re anne
13
Bases de la programmation
IUT de Villetaneuse
Pour voir rapparatre les trois chevrons > > > appuyez simplement sur la touche Entre et
saisissez une nouvelle instruction, sans erreur cette fois.
Notez bien que les deux premires instructions dfinissent des variables, et que linterprteur
conserve leur valeur mesure de lexcution des instructions. Sans cela, la dernire instruction ne
fonctionnerait pas.
Question 17.2 : Entrez dailleurs maintenant la suite dinstructions :
>>> str2 = dolly
>>> print(str1 + + str2)
Vous constaterez que str2 a chang de valeur, si bien que la dernire instruction affiche hello
dolly .
14
1re anne
Departement informatique
# simplissime
print(hello world)
3
4
str1 = hello
print(str1)
str2 = world
print(str2)
print(str1 + + str2)
6
7
8
9
Les lignes commenant par des # indiquent un commentaire : elles ne sont pas interprtes en
tant quinstructions mais permettent de rendre les programmes plus lisibles.
Question 19.2 : Enregistrez ce programme sous le nom hello.py dans le rpertoire de votre
choix. Par exemple, /bdp/tp1 convient parfaitement et vous permettra de le retrouver facilement.
Si le dossier nexiste pas, crez-le.
Question 19.3 : Aprs avoir enregistr le fichier, fermez lditeur de texte.
Question 19.4 : Revenez Eric 4 (si vous lavez ferm par inadvertance, relancez-le).
Question 19.5 : Soit en utilisant le deuxime bouton de la barre doutils gauche (Open), soit en
utilisant le menu droulant File > Open, soit en utilisant le raccourci clavier Ctrl+O (les touches
Ctr l et O simultanment), ouvrez le fichier hello.py .
Si ncessaire, naviguez vers le bon rpertoire. Si vous avez bien enregistr le fichier, et que
vous tes bien dans le bon rpertoire, mais que le fichier napparat pas, il sagit peut-tre dun
problme de filtre : slectionnez All Files *.* dans la liste droulante en bas droite de la
bote de dialogue de slection de fichiers.
Ceci fait, votre fentre principale devrait avoir lallure suivante :
1re anne
15
Bases de la programmation
IUT de Villetaneuse
16
1re anne
Departement informatique
Le programme a t interprt en une seule fois, seuls les rsultats des diffrentes utilisations
de la fonction print() saffichant lcran.
Question 19.9 : Dans la fentre ddition, modifiez le programme en remplaant la 7me ligne
str2 = world par str2 = dolly .
Question 19.10 : Sauvegardez le fichier :
Bouton Save de la barre doutils
Raccourci clavier Ctrl+S
Menu File > Save
Question 19.11 : Excutez nouveau le script et constatez que le programme ayant t modifi,
le rsultat change.
1re anne
17
Bases de la programmation
IUT de Villetaneuse
Question 20.1 : Cliquez sur le bouton en croix tout en haut droite. Ceci a pour effet de fermer
ldition de hello.py
print(\na? )
# le \n permet de sauter une ligne
a = raw_input()
print(b? )
b = raw_input()
print(a= + a + et b= + b)
print(maintenant, echange !)
c = a
Bases de la programmation
18
1re anne
Departement informatique
8
9
10
a = b
b= c
print(et apres, a= + a + et b= + b)
Question 20.5 : Excutez le programme. Quand les raw_input sexcutent, tapez quelque chose
dans linterprteur, et appuyez sur Entre pour valider, le programme passera ensuite linstruction suivante.
En fin de compte, vous devriez obtenir une fentre comme :
19
Bases de la programmation
IUT de Villetaneuse
Question 21.1 : Pour dfinir un breakpoint la ligne 5, mettez le curseur sur la ligne 5, puis
soit :
Dans le menu Debug > Toggle Breakpoint
Utiliser le bouton correspondant dans la barre doutils
Utiliser le raccourci clavier Shift+F11
Un symbole avec une croix saffiche ct du numro 5 de la ligne :
Pour enlever le point darrt, on utilise la mme procdure. Pour le remettre si ncessaire,
idem.
On peut procder encore plus simplement que le raccourci clavier pour activer/dsactiver un
point darrt : il suffit de cliquer l o se trouve le symbole avec la croix.
Question 21.2 : Procdez ainsi pour dfinir le point darrt de la ligne 10.
Question 21.3 : Pour excuter le programme en mode dbogage de manire ce que les points
darrt soient pris en compte, lancez le programme dune manire diffrente :
Par le menu Start > Debug Script
Par le bouton correspondant dans la barre doutils
Par le raccourci clavier F5
Question 21.4 : Entrez des valeurs pour a et b, puis le programme sinterrompt la ligne 5 (avant
de lexcuter). La ligne 5 est surligne de jaune, en attente dun ordre pour poursuivre lexcution.
Bases de la programmation
20
1re anne
Departement informatique
Notez bien qu ce point, c nest pas encore dfinie puisque cette variable ne le sera qu la
ligne 7 du programme.
Question 22.2 : Poursuivez lexcution du programme :
Par le menu Debug > Continue
Par le bouton correspondant dans la barre doutils
Par le raccourci clavier F6
1re anne
21
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
22
1re anne
Chapitre 2
Alternatives
2.1
2.1.1
Squentialit
Rappels
Les instructions sont excutes les unes la suite des autres. la fin de chaque instruction
excute, on passe la suivante, et ainsi de suite sans possibilit de revenir en arrire (au moins
de prime abord). Considrons, par exemple, les instructions suivantes :
1
2
b=5
a=b
Nous pouvons dessiner le graphe de squence suivant :
2.1.2
Un peu de rflexion...
Daprs vous est-il possible de quitter une squence pour en emprunter une autre ? Si oui,
comment dcider du chemin suivre ?
2.2
2.2.1
Un boolen permet de modliser une "affirmation" qui peut tre vraie (cest dire avre) ou
fausse. Pour cela nous disposons de deux valeurs (uniquement) possibles :
23
IUT de Villetaneuse
2.2.2
1
Une expression boolenne simple dtermine la vrit True ou False dune affirmation. Exemple :
print(5>15)
Le code prcdent affiche la valeur False ; car laffirmation : "5 est strictement suprieur 15",
la rponse est False.
Il serait judicieux de pouvoir stocker une valeur boolenne dans un emplacement mmoire afin
de suivre lvolution dune situation. Par exemple un boolen pourrait suivre lvolution dune
temprature et rpondre laffirmation "la temprature est-elle suprieure 100C ?"...
2.2.3
Variables boolennes
Introduction
Une variable boolenne est un emplacement mmoire qui permet de stocker soit la valeur True,
soit la valeur False. Comme vous lavez vu dans le cours sur la squentialit, cet emplacement est
appel variable et dispose dun nom appel nom de variable.
Exemple :
1
2
3
4
Avec le code prcdent, nous pouvons dduire le schma ci-dessous prcisant la dynamique des
variables :
Exemple :
x=20
y=13
z= x+3>y
print(z)
Bases de la programmation
24
1re anne
Departement informatique
Figure 2.3 Dynamique des variables lors de lvaluation dune opration boolenne simple
Lexcution de linstruction de la ligne 3 du listing prcdent est reprsent par la figure 2.3.
Laffichage sera donc : True
Oprations boolennes composites
Cest une opration boolenne compose de plusieurs oprations boolennes simples. Lvaluation de ce type dexpression boolenne complexe se fait en deux tapes :
1. chaque opration boolenne simple est value,
2. lexpression boolenne composite rsultante est value suivant les tables de vrit suivantes :
exp1
True
True
False
False
exp2
True
False
True
False
not(exp2)
False
True
exp1 or exp2
True
True
True
False
2.2.4
<->
<->
<->
<->
e1
not(e1)
not(e1) or not(e2)
not(e1) and not(e2)
<->
<->
<->
<->
<->
<->
e1>=e2
e1>e2
e1<=e2
e1<e2
e1 !=e2
e1==e2
25
Bases de la programmation
IUT de Villetaneuse
2.3
Lexcution dune squence dinstructions peut tre conditionne par le rsultat de lvaluation
dune expression boolenne.
2.3.1
I1
I2
if condition :
I4
I5
I6
I7
Les instructions des lignes 1 et 2 sont excutes. Puis, si condition est vrifie (valuation
de la condition True), alors les instructions des lignes 4 et 5 sont excutes. Dans tous les
cas, le programme excute ensuite les instructions des lignes 6 et 7. On dit que lexcution de la
squence des lignes 4 et 5 est conditionnelle. Le traitement de la structure if lors de lexcution du
programme est reprsent dans la figure 2.5. Les numros de la figure correspondent aux numros
de lignes du listing de code prcdent.
Remarque importante : Lindentation, cest--dire les espaces insrs avant une instruction, des lignes 4 et 5 est obligatoire. Cela permet linterprteur Python de distinguer le bloc
conditionnel. Ce bloc peut contenir autant dinstructions que ncessaire.
Exemple :
temperature = int(raw_input())
pression=100
3
4
5
6
if temperature > 55 :
print(alerte)
#indentation obligatoire
pression = pression - 5 #indentation obligatoire
Bases de la programmation
26
1re anne
Departement informatique
print(pression)
Dans cet exemple, le programme affichera lcran le message alerte et diminuera la pression
de 5 uniquement si la temprature saisie par lutilisateur est strictement suprieure 55.
I Sur ce thme : Exercice 6, TD2
2.3.2
Cette structure de contrle permet dexcuter une squence dinstructions si une condition est
remplie. Cependant, si cette condition nest pas remplie, une autre squence dinstructions est
excute.
1
2
3
4
5
6
7
8
if condition :
I1
I2
else:
I3
I4
I5
I6
# not(condition)
Si la condition condition est vrifie (valuation de la condition True), alors les instructions
des lignes 2 et 3 sont excutes, sinon (cest--dire si la condition est value False) la squence
dinstructions des lignes 5 et 6 est excute. Dans tous les cas, le programme excute ensuite
les instructions des lignes 7 et 8. Le traitement de la structure if, else lors de lexcution du
programme est reprsent dans la figure 2.6. Les numros de la figure correspondent aux numros
de lignes du listing de code prcdent.
1
F
2
5
3
6
Exemple :
temperature = int(raw_input())
if temperature > 55 :
1re anne
27
Bases de la programmation
IUT de Villetaneuse
3
4
5
print(alerte)
#indentation obligatoire
else :
print(Tout va bien au niveau de la temprature) #indentation obligatoire
Dans cet exemple, le programme affichera lcran le message alerte si la temprature saisie
par lutilisateur est strictement suprieure 55. Dans le cas contraire, il affichera lcran le
message Tout va bien au niveau de la temprature.
2.3.3
Les alternatives peuvent tre imbriques pour exprimer des choix "complexes" et exclusifs les
uns des autres, ce qui permet daffiner le traitement selon un contexte donn.
Linstruction elif, contraction de "else if" (sinon si), permet dexcuter un bloc dinstructions
si la condition associe est value True. Cependant, cette condition ne sera value que si
toutes les conditions du if et des elif prcdents ont t values False. Dans une structure
if, elif, else, on peut avoir autant dinstructions elif que ncessaire. Le traitement de la
structure if, elif, else lors de lexcution du programme est reprsent dans la figure 2.7. Les
numros de la figure correspondent aux numros de lignes du listing de code suivant.
1
2
3
4
5
6
7
8
9
10
I1
if condition1 :
I2
elif condition2 :
I3
elif condition3 :
I4
else :
I5
I6
1
2
F
4
F
6
F
10
28
1re anne
Departement informatique
1
temperature = int(raw_input())
2
3
4
5
6
7
8
et <= 75
I
I
I
I
I
I
Sur
Sur
Sur
Sur
Sur
Sur
1re anne
ce
ce
ce
ce
ce
ce
thme
thme
thme
thme
thme
thme
:
:
:
:
:
:
Exercice
Exercice
Exercice
Exercice
Exercice
Exercice
7, TD2
8, TD2
9, TD2
10, TD2
11, TD2
12, TD2
29
Bases de la programmation
IUT de Villetaneuse
TD3 : Alternatives
x = 1
y = 2
print(x)
z = x+y
print(z)
Important : Vous prendrez soin de suivre pas pas lvolution des variables.
Prvoir le rsultat des expressions boolennes (1), (2), (3) et (4) dans lalgorithme suivant :
x = 12
test =
test =
test =
test =
test =
x>12
x<11 or (x>40 and x<100)
x!=9
not(x>10 and x<=12) and x%2==0
x>=10 and test
Important : Vous prendrez soin de suivre pas pas lvolution des variables.
flag
flag
flag
flag
flag
flag
=
=
=
=
=
=
False
not(flag)
not(flag)
not(flag)
not(flag)
not(flag)
Exercice 5 :
Bases de la programmation
30
1re anne
Departement informatique
1. Saisir une valeur entire. Si cette dernire est paire et positive ou si cette valeur est impaire
et comprise entre 5 (inclus) et 25 (inclus), alors lexpression boolenne vaut True sinon False.
De plus vous afficherez le rsultat. Remarque : Il existe un oprateur appel modulo dont le
symbole est % qui permet de calculer le reste de la division euclidienne. Par exemple, 3%2
vaut 1.
2. Donner un jeu dessai (4 tests significatifs) et prvoir les rsultats.
interrupteur=False
intensite=1
3
4
5
6
7
8
9
10
11
interrupteur =False
intensite=0
interrupteur =not(interrupteur)
if interrupteur ==True:
print(lampe allumee)
intensite=intensite+1
else:
print(lampe eteinte)
12
13
interrupteur =not(interrupteur)
14
15
16
17
18
19
if interrupteur ==True:
print(lampe allumee)
intensite=intensite+1
else:
print(lampe eteinte)
20
21
interrupteur =not(interrupteur)
22
23
24
25
26
27
if interrupteur ==True:
print(lampe allumee)
intensite=intensite+1
else:
print(lampe eteinte)
28
29
30
interrupteur =not(interrupteur)
31
32
33
34
35
36
if interrupteur ==True:
print(lampe allumee)
intensite=intensite+1
else:
print(lampe eteinte)
37
38
interrupteur =not(interrupteur)
39
40
41
42
43
if interrupteur ==True:
print(lampe allumee)
intensite=intensite+1
else:
1re anne
31
Bases de la programmation
IUT de Villetaneuse
44
print(lampe eteinte)
Exercice 8 :
crire un algorithme qui demande deux nombres entiers lutilisateur et qui calcule la diffrence
du plus grand nombre avec le plus petit nombre, quel que soit lordre de saisie.
Exercice 10 :
crire un algorithme qui demande lutilisateur lheure, les minutes et les secondes, et il
affichera lheure quil sera une seconde plus tard.
Par exemple, si lutilisateur tape 21 puis 32 puis 8, lalgorithme doit rpondre : "Dans une seconde,
il sera 21 heure(s) 32 minute(s) et 9 secondes".
NB : on suppose que lutilisateur entre une heure valide. Pas besoin donc de la vrifier.
Exercice 11 :
crire un algorithme qui demande 3 nombres entiers lutilisateur et qui les trie par ordre
croissant. Un affichage devra tre prvu.
Exemple : Si un instant donn trois variables sont initialises telles que :
1
2
3
a=4
b=7
c=1
alors aprs le traitement, les instructions suivantes :
afficheront :
Exercice 12 :
crire un algorithme qui calcule et affiche les racines relles dun polynme du second degr.
Prenez soin de bien analyser le problme, et posez-vous la question de savoir ce qui est demand
trs prcisment pour rpertorier les donnes du problme.
Rappel : Ce sont les racines relles de lquation a*x*x + b*x + c = 0
Bases de la programmation
32
1re anne
Departement informatique
1re anne
33
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
34
1re anne
Chapitre 3
Boucles Simples
3.1
Introduction
Instruction 0
while(condition):
Instruction 1
Instruction 2
...
Instruction n
Instruction n+1
35
IUT de Villetaneuse
1
2
3
4
5
6
print (********************)
i = 0
while(i <4 ):
print hello world
i += 1
print (********************)
Lexcution de ce code produit alors laffichage suivant :
********************
hello world
hello world
hello world
hello world
********************
Pour comprendre exactement ce qui se passe durant lexcution, excutons la main lexemple
prcdent. Les instructions sont alors les suivantes :
instruction 1 : affichage de ********************
instruction 2 : dfinition dune variable entire de valeur 0
instruction 3 : test (i < 4) avec i = 0 est vrai => excuter les instructions 4 et 5
instruction 4 : affichage de hello world
instruction 5 : modifie la valeur de la variable i : i vaut 1
boucle instruction 3 : test (i < 4) avec i = 1 est vrai => excuter les instructions 4 et 5
instruction 4 : affichage de hello world
instruction 5 : modifie la valeur de la variable i : i vaut 2
boucle instruction 3 : test (i < 4) avec i = 2 est vrai => excuter les instructions 4 et 5
instruction 4 : affichage de hello world
instruction 5 : modifie la valeur de la variable i : i vaut 3
boucle instruction 3 : test (i < 4) avec i = 3 est vrai => excuter les instructions 4 et 5
instruction 4 : affichage de hello world
instruction 5 : modifie la valeur de la variable i : i vaut 4
boucle instruction 3 : test (i < 4) avec i = 4 est faux => excuter linstruction 6 (et suivantes)
instruction 6 : affichage de ********************
I Sur ce thme : Exercice 1, TD3
Bases de la programmation
36
1re anne
Departement informatique
3.2
Dans cette partie, nous montrons le raisonnement relatif llaboration dune boucle simple.
Nous nous concentrons sur lcriture dun programme permettant dafficher tous les nombres pairs
entre 1 et 10 inclus. Le premier code venant lesprit est donc le suivant :
1
2
3
4
5
1
2
3
4
5
6
7
8
9
10
print(2)
print(4)
print(6)
print(8)
print(10)
Cependant, cest loin dtre la meilleure technique ! De plus, si la question consiste afficher tous
les nombres pairs entre 1 et 10000 inclus, cette technique necessitera plusieurs heures pour crire
le programme ! Par ailleurs, comme il est clair que lon rpte plus ou moins la mme instruction,
savoir afficher un nombre, il est possible (en modifiant lgrement le code), dutiliser une boucle
pour afficher ces nombres pairs.
Afin de pouvoir crer une boucle, il faut que les instructions effectues chaque itration soient
identiques. Pour cela, il convient tout dabord de modifier le programme afin de faire en sorte que
les affichages soient strictement identiques. On utilise alors une variable, disons i, pour stocker la
partie qui ne se rpte pas (2, 4,...,10). Ainsi, laffichage devient identique pour tous les nombres,
savoir print(i). Le code est alors le suivant :
i = 2
print(i)
i = 4
print(i)
i = 6
print(i)
i = 8
print(i)
i = 10
print(i)
On rpte bien 5 fois la mme instruction print(i). Par contre, on effectue 5 affectations
diffrentes de la variable i. Mais on se rend finalement compte que laffectation consiste ajouter
deux la valeur de i. On peut donc remplacer les 5 affectations diffrentes par laffectation i+=2.
Pour que cela soit toujours vrai, il faut par contre que i soit initialement gal 0. On obtient alors
le code suivant :
1
i = 0
2
3
4
i += 2
print(i)
5
6
7
i += 2
print(i)
8
9
10
i += 2
print(i)
11
12
13
i += 2
print(i)
14
15
i += 2
1re anne
37
Bases de la programmation
IUT de Villetaneuse
16
1
2
3
4
1
2
3
4
print(i)
Dans ce code, il y a bien un bloc de deux instructions rpt 5 fois. Avant le dernier bloc dinstructions (ligne 14), la variable i est gale 8. On rpte donc ces instructions tant que la variable
i est infrieure ou gale 8. Nous pouvons donc remplacer ce code par la boucle :
i = 0
while (i <= 8) :
i += 2
print(i)
La difficult de llaboration dune boucle vient du fait quil faut tre capable de modifier
les instructions afin quelles soient identiques. Lexemple prsent ici est simple si lon comprend
que la variable i est incrmente de deux chaque itration. Cette "transformation" du code (en
instructions identiques) peut cependant tre difficile si lon na pas la bonne "intuition".
Dans le code prcdent, chaque itration, on effectue dabord lincrmentation de la variable i
puis laffichage de i. Lordre dans lequel ces deux instructions est fait est compltement arbitraire.
On pourrait, tout aussi bien considrer qu chaque itration, on affiche dabord i avant de lincrmenter. Comme on souhaite dabord afficher 2, il faut par contre affecter la valeur 2 i avant
la boucle while. De plus, comme le dernier entier afficher est 10, il est ncessaire deffectuer le
bloc dinstruction tant que i est infrieur ou gal 10. On obtient alors le code suivant :
i = 2
while (i <= 10) :
print(i)
i += 2
3.3
Jusqu maintenant, dans les diffrents exemples de boucles que nous avons vus, le nombre
ditrations tait connu lavance. Cependant, ceci nest pas toujours vrai. Dans ce cas, il nest
plus possible de choisir une variable et de la modifier jusqu ce quelle atteigne une certaine
valeur. Dautres types de conditions associes au while sont ncessaires. Pour illustrer ceci, nous
nous intressons lcriture dun programme permettant de calculer la moyenne dun tudiant.
Le nombre de notes dun tudiant nest pas connu lavance. Lutilisateur doit saisir au clavier
les diffrentes notes (nombres rels compris entre 0.0 et 20.0). Le programme doit arrter la saisie
lorsque le nombre saisi par lutilisateur ne correspond pas une note. Il doit alors afficher la
moyenne des notes saisies.
Comme lutilisateur peut saisir plusieurs notes (par exemple 10), il y a forcment une rptition
de linstruction de saisie dun nombre, cest--dire, de linstruction nb = float(raw_input()).
De plus, cette saisie doit continuer tant que le nombre saisi correspond une note, cest--dire,
tant que la variable nb est suprieure ou gale 0.0 et infrieure ou gale 20.0. Une bauche de
la boucle est alors la suivante :
1
2
La saisie de nombre ne suffit pas. Afin de calculer la moyenne de plusieurs notes, il faut connatre
le nombre total de notes ainsi que la somme de ces notes. Il faut donc deux nouvelles variables, une
correspondant au nombre de notes que lon appelera compteur, et une correspondant la somme
des notes (variable somme). chaque itration, il faut donc incrmenter la variable compteur,
ajouter somme la variable nb et demander nouveau que lutilisateur saisisse un nombre. La
boucle devient alors
Bases de la programmation
38
1re anne
Departement informatique
1
2
3
4
1
2
3
4
5
6
7
Attention, lordre est trs important ! Comme lutilisateur peut saisir un nombre qui ne corresponde
pas une note, il est ncessaire que lon vrifie que nb est une note avant de lajouter somme.
Pour cela, la saisie de nb est la dernire instruction du while. Si ce nombre est une note, autrement
dit, si la condition du while est vraie, alors on incrmente compteur de un et on ajoute la dernire
note saisie somme litration suivante.
Il faut alors maintenant considrer les valeurs initiales des variables. En effet, lors du premier
test du while, la variable nb nest pas dfinie. Elle doit correspondre la premire note saisie par
lutilisateur. Il faut donc ajouter avant la boucle linstruction nb = float(raw_input()). Il faut
galement donner des valeurs initiales pour compteur et somme. Afin que le rsultat soit correct,
il faut les initialiser 0. On a alors
nb = float(raw_input())
compteur = 0
somme = 0
while ((nb >= 0) and (nb <= 20)) :
compteur += 1
somme += nb
nb = float(raw_input())
if(compteur==0) :
print(Aucune note n\a ete saisie. On ne peut donc pas calculer la moyenne!!!)
else :
print(La moyenne est + str(somme/compteur))
3.4
Boucles infinies
Les boucles infinies sont des boucles dont les instructions sont excutes une infinit de fois. De
telles boucles interviennent lorsque la condition du while est toujours vraie. Elles correspondent
une erreur de programmation et ne sont pas dtectes par lordinateur. De telles erreurs sont dues
soit une mauvaise initialisation de la ou des variables intervenant dans la condition, soit un
mauvais test. Voici un exemple de boucle infinie :
1
2
3
4
i = 1
while (i != 10) :
i += 2
print(i)
Un peu (ou beaucoup !) de reflexion avant lcriture de la boucle permet dviter de telles boucles
infinies.
1re anne
39
Bases de la programmation
IUT de Villetaneuse
Exercice 1 :
1
2
3
4
5
6
i = 10
nb = 1
while (i<5) :
i += 1
nb += 2 * i
print (nb = + str(nb))
Mme question lorsque la premire instruction est respectivement remplace par linstruction i =
0 et i = 3.
Exercice 2 :
1
2
3
4
5
6
7
i = 12
j = 43
print (i = + str(i) + , j = + str(j))
while ((i<25) and (j > 3 * i)) :
i += 3
j -= i - 18
print (i = + str(i) + , j = + str(j))
Exercice 3 :
Afficher les entiers de 1 20 dans lordre dcroissant.
Exercice 4 :
Afficher la table de multiplication de 7 jusqu 20 comme suit :
1*7=7
2 * 7 = 14
...
19 * 7 = 133
20 * 7 = 140
Exercice 5 :
crire un programme demandant lutilisateur de saisir un nombre entier positif. La saisie
sera rpte jusqu ce que le nombre soit positif. Mme question pour un nombre entier positif
et multiple de 3.
Exercice 6 :
crire un programme permettant de vrifier si un nombre saisi par lutilisateur est premier.
Rappel : Un nombre est dit premier si ses deux seuls diviseurs entiers positifs sont 1 ou lui-mme.
Le nombre 13 est donc un nombre premier, alors que 6 ne lest pas puisque 6 = 2 3.
Exercice 7 :
(Exercice bas sur un exercice donn en IUT de mesures physiques Orsay.)
Bases de la programmation
40
1re anne
Departement informatique
1re anne
41
Bases de la programmation
IUT de Villetaneuse
Exercice 8 :
crire un programme simulant le lanc de 5 ds. Afficher le rsultat de chaque d ainsi que la
somme des 5 lancs obtenus. Pour simuler un lancer de d, on gnre un nombre alatoire compris
entre 1 et 6 inclus. Cela seffectue en python laide de linstruction tmp = randint(1,6) qui
affecte la variable tmp un nombre entier alatoire entre 1 et 6 inclus. Afin de pouvoir utiliser
cette instruction, il est ncessaire dajouter en dbut de programme linstruction from random
import *.
Exercice 9 :
crire un programme permettant de calculer la factorielle dun nombre saisi par lutilisateur.
Rappel : si n est un entier positif, alors la factorielle de n, note n!, est gale :
n! = n (n 1) (n 2) 2 1
Par convention, 0! = 1.
Exercice 10 :
crire un programme qui, pour tout entier compris entre 1 et 10, affiche sur une mme ligne,
les valeurs de cet entier, de son carr et de son cube. Laffichage doit donc tre quivalent :
1
1
1
2
4
8
3
9
27
4 16
64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
Afin dobtenir laffichage correct, il est possible de spcifier en python le nombre de caractres
utiliser pour afficher une chane de caractres, cette chane tant alors justifie droite. Pour
cela, il suffit dutiliser linstruction rjust(str,n) o str est une chane de caractres et n est le
nombre de caractres utiliser pour laffichage de str. Afin de pouvoir utiliser cette instruction,
il est ncessaire dajouter en dbut de programme linstruction from string import *. titre
dexemple, les instructions suivantes
from string import *
print (x)
print (rjust(x,2))
print (rjust(x,3))
nb = 1
print (rjust(str(nb),3))
nb = 10
print (rjust(str(nb),3))
nb = 100
print (str(nb))
correspondent laffichage :
Bases de la programmation
42
1re anne
Departement informatique
x
x
x
1
10
100
Exercice 11 :
En utilisant linstruction rjust(n) explique prcdemment, crire un programme reproduisant
laffichage suivant :
*
*
*
*
*
*
*
*
*
*
*
lcran des figures. Afin de pouvoir uiliser ce module, il faut ajouter, en dbut de programme,
linstruction : from turtle import *. On peut alors utiliser les instructions suivantes pour dessiner :
goto(x,y) : aller lendroit de coordonnes x et y,
1re anne
43
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
44
1re anne
Chapitre 4
Tableaux
Les variables que nous avons utilises jusqu maintenant ne permettent de stocker quune
seule donne par variable. Ainsi, si je dois stocker le score de deux joueurs, je dois donc crer deux
variables, par exemple scoreJoueur1 et scoreJoueur2. Si ce moyen est possible pour quelques
donnes, il nest par contre pas possible dutiliser une variable par donne stocker lorsque le
nombre de donnes est trs grand. En effet, si lon doit stocker le score de 1000 joueurs, il est
impossible dcrire un algorithme utilisant 1000 variables, chacune stockant le score dun des
joueurs. Dans ce cas, il est ncessaire dutiliser les tableaux.
Un tableau est un type de donnes contenant plusieurs valeurs. Ces valeurs peuvent tre de
diffrents types (entiers, rels, chanes de caractres). Un tableau est dfini par les symboles [ et ].
Entre ces crochets sont dfinies les valeurs contenues dans le tableau. Ces valeurs sont spares par
une virgule et sont appeles lments du tableau. Le tableau [abc, True, 12.3, 3] contient 4
lments, respectivement de type chane de caractres, boolen, rel et entier.
4.1
Comme pour les autres types de donnes, les tableaux peuvent tre stocks dans une variable.
Ceci se fait en affectant une variable un tableau. Ainsi, linstruction
1
1
2
3
4
5
1
2
3
4
dfinit un tableau contenant trois chanes de caractres qui est affect la variable de nom tab.
On peut accder aux lments dun tableau affect une variable par leur numro de position
dans celui-ci ; on appelle ce numro indice du tableau. Il suffit pour cela de donner le nom de la variable de type tableau suivi de lindice entre crochets. On obtient alors variableTableau[indice].
Une chose est cependant retenir : lindice dun tableau de n lments commence 0 et se termine n 1. On peut accder un lment dun tableau pour connatre sa valeur ou la modifier.
Lexcution du code (o tab est la variable dfinie prcdemment)
print(le premier lment du tableau tab est : + tab[0])
print(le deuxime lment du tableau tab est : + tab[1])
print(le troisime lment du tableau tab est : + tab[2])
tab[0] = hello
print(le premier lment du tableau tab est maintenant : + tab[0])
produira laffichage suivant
le
le
le
le
45
IUT de Villetaneuse
Il est galement possible de dfinir la position de llment par rapport la fin du tableau.
Pour accder au ime lment du tableau partir de la fin, on utilise alors variableTableau[-i].
On parle alors dindice ngatif. Attention :
afin quil ny ait pas dambugut avec les indices, lindice ngatif dun tableau de n lments
commence -1 et se termine n
lexistence dindices ngatifs est une spcificit de Python. La plupart des langages nacceptent quun seul indice par position du tableau.
Lexcution du code (o tab est la variable dfinie prcdemment)
1
2
3
1
2
3
produira laffichage suivant
4.2
Comme les autres types de donnes, il est possible dafficher un tableau laide de la fonction
print(). Ainsi, lexcution du code
1
2
animaux = [girafe,hippopotame,singe,chat]
print(animaux)
affichera lcran [girafe,hippopotame,singe,chat].
Il est galement possible dutiliser la fonction str() afin de transformer le tableau en une
chane de caractres. Cette chane est alors identique au rsultat de la fonction print(). En effet,
en plus des lments, la chane de caractres contient les crochets et les virgules. De plus, les
lments du tableau correspondant des chanes de caractres sont encadrs par des apostrophes.
Lintrt de la fonction str() est de pouvoir afficher des chanes de caractres contenant la valeur
dun tableau. Ainsi, linstruction print(le tableau vaut : + str(animaux)) affichera le
tableau vaut : [girafe,hippopotame,singe,chat].
4.3
La fonction len() permet de donner le nombre dlments dun tableau. Il faut par contre
donner entre les parenthses le nom du tableau dont on veut connatre le nombre dlments.
Lexcution de linstruction print(len(tab)) affichera alors 3 puisque le tableau tab contient 3
lments, savoir bonjour, au revoir, et salut.
Il est trs souvent ncessaire daccder tous les lments dun tableau, que ce soit pour calculer
la somme des lments du tableau (si ces derniers sont des nombres), dterminer le plus grand
lment ou pour savoir si une valeur apparat dans un tableau. Pour accder tous les lments
dun tableau, une faon consiste utiliser une boucle while en faisant varier lindice de 0 la
longueur du tableau - 1. Ainsi, le code suivant permet dafficher tous les lments dun tableau,
les uns en dessous des autres.
1
2
3
animaux = [girafe,hippopotame,singe,chat]
print(Voici les animaux contenus dans le tableau)
indice = 0
Bases de la programmation
46
1re anne
Departement informatique
4
5
6
4.4
Oprateurs + et *
Les tableaux, tout comme les chanes, supportent les oprations de concatnation (oprateur +)
et de rptition (oprateur *). Lopration de concatnation t1 + t2, lorsque t1 et t2 sont des
tableaux, cre un nouveau tableau dont les lments correspondent aux lments de t1 suivis des
lments de t2. Lopration de rptition t * n, o t est un tableau et n est un entier positif ou
nul, cre un nouveau tableau de taille n * len(t) dont les lments correspondent aux lments
de t rpts n fois. Ainsi, lexcution du code
1
2
1
2
print([a,1,-3] + [coucou,24,12])
print([0,1] * 6)
produit laffichage
Lopration de rptition est notamment utile pour crer un tableau dont tous les lments ont
la mme valeur.
I Sur ce thme : Exercice 5, TD4
4.5
Le type tableau modifie quelque peu loprateur daffectation lorsque loprande de droite est
une variable de type tableau. En effet, si lon a linstruction t2 = t, o t est une variable de type
tableau, la variable t2 contient alors exactement le mme tableau que la variable t ! Ceci implique
que si lon modifie un lment de t, on modifie en mme temps le tableau t2, et vice versa. Ainsi,
lexcution du code
1
2
3
4
5
1
2
1
2
3
4
5
t = [1,2,3]
t2 = t
t[0] = 18
print(t)
print(t2)
produit laffichage
[18, 2, 3]
[18, 2, 3]
Ceci nest vrai que si lon affecte la variable t2 une variable de type tableau. Si lon affecte
t2 un autre tableau (mme si ce nouveau tableau est identique t), le "problme" napparat
plus. Par exemple, le code
t = [1,2,3]
t2 = [1,2,3] #ou t2 = t * 1 ou t2 = t + []
t[0] = 18
print(t)
print(t2)
1re anne
47
Bases de la programmation
IUT de Villetaneuse
[18, 2, 3]
[1, 2, 3]
4.6
Oprateur in
Loprateur in permet de tester si une valeur apparat dans un tableau. Il sutilise selon le
modle valeur in tableau et renvoie True si la valeur apparat dans le tableau et False sinon.
Par exemple, en excutant le code
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
liste = [18.4,ab,33,12]
if 19 in liste :
print(19 est une valeur du tableau)
else :
print(19 n\est pas une valeur du tableau)
if 33 in liste :
print(33 est une valeur du tableau)
else :
print(33 n\est pas une valeur du tableau)
nb = 12
if nb in liste :
print(Un lment du tableau a la mme valeur que nb)
On obtient alors
4.7
Boucle for
Nous avons vu prcdemment comment parcourir un tableau avec une boucle while en faisant
varier lindice. Il existe cependant une autre faon de parcourir le tableau, qui consiste affecter
successivement une variable la valeur de tous les lments du tableau. Ce type de parcours se fait
laide de linstruction for val in tab :, o val est une variable et tab est un tableau. Cette
instruction peut se traduire par "pour la variable val prenant successivement toutes les valeurs
apparaissant dans le tableau tab, faire". Lexemple suivant permet dafficher tous les lments
dun tableau, les uns en dessous des autres. (On remarque que le code donne exactement le mme
rsultat que dans lexemple donn avec la boucle while.)
1
2
3
4
animaux = [girafe,hippopotame,singe,chat]
print(Voici les animaux contenus dans le tableau)
for animal in animaux :
print(animal)
Lutilisation de la boucle for permet dcrire un code plus clair et plus rapide pour le parcours
dun tableau. Attention, il convient de bien comprendre la diffrence entre la boucle while et la
boucle for dcrites ci-dessus. La premire utilise dans le test une variable correspondant lindice
du tableau et accde aux lments grce tableau[indice] alors dans la boucle for, la variable
utilise par la boucle prend "directement" la valeur des lments du tableau.
Attention, dans la boucle for, la variable de boucle prend successivement la valeur de tous les
lments du tableau, mais elle ne reprsente pas llment lui-mme. Ceci implique que mme si
lon modifie la variable lintrieur de la boucle, le tableau nest pas modifi. Par exemple, la
fin de lexcution du code
Bases de la programmation
48
1re anne
Departement informatique
1
2
3
t = [1,2,3,4]
for nb in t :
nb = nb +10
le tableau affect la variable t na pas t modifi. Il est toujours gal [1,2,3,4].
I Sur ce thme : Exercice 7, TD4
4.8
Il existe diffrentes fonctions permettant de modifier un tableau. (Ces fonctions ne crent pas
un nouveau tableau.) Les noms de ces fonctions respectent le modle list.nomFonction car elles
sappliquent aux tableaux (traduction de list).
list.insert(tab,ind,val) : insre dans le tableau tab un lment de valeur val lindice
ind
list.pop(tab,ind) : supprime dans le tableau llment qui se trouve lindice ind
list.sort(tab) : trie le tableau tab
list.reverse(tab) : inverse lordre des lments du tableau tab
Lexcution du code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
x = [132,18,24]
print(x)
list.insert(x,0,36)
print(x)
list.insert(x,1,-6)
print(x)
list.insert(x,1,ze)
print(x)
list.pop(x,3)
print(x)
list.pop(x,3)
print(x)
list.sort(x)
print(x)
list.reverse(x)
print(x)
donne laffichage suivant
4.9
La fonction range() permet de crer des tableaux dentiers (et dentiers uniquement) de manire simple et rapide. Elle fonctionne sur le modle : range([dbut,] fin[, pas]). Elle cre
alors un tableau contenant tous les entiers entre dbut compris et fin non compris, selon le pas
pas. Les arguments entre crochets sont optionnels. Si largument dbut nest pas spcifi, il est
alors considr comme gal 0. Si le pas pas nest pas spcifi, il est alors considr comme gal
1re anne
49
Bases de la programmation
IUT de Villetaneuse
1. Attention, si seulement deux arguments sont spcifis, ils correspondent alors aux arguments
dbut et fin. En excutant le code
1
2
3
4
5
1
2
3
4
5
1
2
1
2
3
4
print(range(0,10))
print(range(10))
print(range(15,21))
print(range(0,1000,100))
print(range(2,-5,-1))
on obtient laffichage
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[15, 16, 17, 18, 19, 20]
[0, 100, 200, 300, 400, 500, 600, 700, 800, 900]
[2, 1, 0, -1, -2, -3, -4]
La fonction range() est aussi utile pour crer une boucle for. Ainsi, pour excuter 10 fois une
instruction, par exemple afficher bonjour, il est possible dutiliser les instructions
for nb in range(10) :
print(bonjour)
En effet, linstruction print(bonjour) sera effectue pour chaque valeur prise par la variable
nb. Or, dans ce cas, nb prend successivement comme valeur tous les lments du tableau range(10),
savoir : 0, 1, ..., 9.
De la mme faon, la fonction range() permet de crer une boucle for qui parcourt les indices
dun tableau. Lexemple suivant permet dafficher tous les lments dun tableau, les uns en dessous
des autres. (On remarque que ce code donne exactement le mme rsultat que dans les deux
exemples donns prcdemment pour la boucle while et la boucle for.)
animaux = [girafe,hippopotame,singe,chat]
print(Voici les animaux contenus dans le tableau)
for indice in range(len(animaux)) :
print(animaux[indice])
4.10
Chanes de caractres
Les chanes de caractres peuvent tre considres comme des tableaux. Il est donc possible
daccder aux caractres grce leurs indices et de crer de nouvelles chanes de caractres
laide des tranches et des oprations de concatnation et de rptition. Cependant, ces tableaux
sont constants, cest--dire quil nest pas possible de modifier les lments (i.e., les caractres).
Linstruction ch[0] = a nest donc par exemple pas permise si ch est une chane de caractres.
Par ailleurs, la fonction print() naffiche pas la chane sous forme de tableau (Laffichage ne
contient donc ni les crochets, ni les apostrophes). Lexcution du code
1
2
3
4
ch = bonjour
print(ch)
print(ch[0])
print(ch[3] + ch[-1])
affiche alors
Bases de la programmation
50
1re anne
Departement informatique
1
2
3
bonjour
b
jr
Comme les chanes de caractres sont des tableaux constants, si lon souhaite modifier un
caractre, il faut alors construire une nouvelle chane. Par exemple, si lon souhaite afficher la
chane ch en remplaant le caractre la position 3 par la lettre k, on peut alors par exemple
utiliser linstruction print(ch[0] + ch[1] + ch[2] +k + ch[4] + ch[5] + ch[6]).
I Sur ce thme : Exercices 11, 12 et 13, TD4
1re anne
51
Bases de la programmation
IUT de Villetaneuse
TD5 : Tableaux
Exercice 1 :
Affecter une variable appele semaine un tableau contenant les jours de la semaine. Afficher
le premier lment et le dernier lment de semaine en utilisant successivement les indices et les
indices ngatifs.
Exercice 2 :
Reprendre la variable semaine dfinie dans lexercice 1. Afficher les jours de la semaine en
indiquant devant le numro du jour. Laffichage doit tre quivalent :
1
2
3
4
5
6
7
1
2
3
4
5
6
7
lundi
mardi
mercredi
jeudi
vendredi
samedi
dimanche
Inverser ensuite lordre daffichage (commencer par le dimanche pour finir par le lundi) (deux
parcours dindices diffrents avec une boucle while).
Exercice 3 :
Affecter la variable tab le tableau [5,6,8,14,17]. Calculer ensuite la somme des nombres
de ce tableau et lafficher.
Exercice 4 :
crire un programme qui recherche le plus grand lment prsent dans un tableau donn. Par
exemple, si le tableau est gal [32, 5, 12, 8, 3, 75, 2, 15], ce programme doit afficher :
le plus grand lment du tableau a la valeur 75.
Exercice 5 :
crire un programme qui permet un utilisateur de saisir les notes dun tudiant et de les
stocker dans un tableau. La saisie sarrte lorsque lutilisateur a saisi un nombre strictement
infrieur 0 ou strictement suprieur 20. Afficher alors le tableau si celui-ci nest pas vide.
Exercice 6 :
1
2
3
4
5
6
7
8
9
t1= [a, b, c, d]
t2 = [34, 31, 957]
t3 = t1
t3[1] = -3
t1 = t2
t2[0] = abc
t3 = t2 + []
t2[0] = bonjour
t3[2] = oui
Exercice 7 :
Bases de la programmation
52
1re anne
Departement informatique
Modifier le code des exercices 3 et 4 en utilisant la boucle for la place de la boucle while.
Exercice 8 :
Soit la variable de type tableau x = [34,-2,0,39,0,78,0,0,46]. Supprimer toutes les valeurs
nulles de ce tableau puis lafficher dans lordre dcroissant.
Exercice 9 :
Utiliser la fonction range() pour afficher :
les entiers de 0 3
les entiers de 4 7
les entiers de 2 8 par pas de 2
Exercice 10 :
Modifier le code de la premire question de lexercice 2 en utilisant la boucle for la place de
la boucle while.
Exercice 11 :
Considrons la chane s = bonjour. Quel est le nombre dlments de [s] ?
crire un programme qui cre, partir dune chane de caractres, disons s = bonjour,
un tableau tab dont les lments sont les lettres de la chane de caractres s. Crer ensuite une
chane de caractres s2, dont les lettres sont les lments de tab. Les chanes s et s2 doivent tre
quivalentes. Donner le rsultat produit par laffichage de s, tab et s2.
Exercice 12 :
Saisir une chane de caractres et lafficher en remplaant toutes les voyelles par un tiret.
Ainsi, si la chane saisie est Il fait beau aujourdhui, le programme doit afficher -l ft bjrdh
Exercice 13 :
Faire saisir lutilisateur une chane de caractres et tester si cette chane correspond un
entier positif ou ngatif.
1re anne
53
Bases de la programmation
IUT de Villetaneuse
TP5 : Tableaux
Exercice 14 :
Voici les notes dun tudiant sous forme dun tableau : [8, 4, 12, 11, 9, 14, 19, 11, 19,
4, 18, 12, 19, 3, 5]. crire un programme qui affiche la note maximum, la note minimum et
et la moyenne de cet tudiant. Amliorer le programme ajoutant la mention : redoublement (< 10),
passable (entre 10 et 12), assez-bien (entre 12 et 14), bien (entre 14 et 16) et trs bien (suprieur
ou gal 16).
Exercice 15 :
Considrons les variables suivantes suivantes :
joursMois = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
nomMois = [Janvier, Fvrier, Mars, Avril, Mai, Juin, Juillet,
Aot, Septembre, Octobre, Novembre, Dcembre]
crire un programme qui cre un nouveau tableau. Celui-ci devra contenir tous les lments
des deux tableaux 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...].
Exercice 16 :
Ecrivez un programme qui permet dafficher les tailles des prnoms suivant : Jean-Michel,
Marc, Vanessa, Anne, Maximilien, Alexandre-Benoit, Louise
Exercice 17 :
crire un programme qui cre, partir dun tableau de chanes de caractres, deux nouveaux
tableaux. Lun contiendra les mots comportant moins de 6 caractres, lautre les mots comportant 6 caractres ou davantage. Si le tableau donn est [Jean, Maximilien, Brigitte,
Sonia, Jean-Pierre, Sandra], les deux tableaux crs doivent tre : [Jean, Sonia]
et [Maximilien, Brigitte, Jean-Pierre, Sandra].
Exercice 18 :
crire un programme permettant lutilisateur de saisir un mot et indiquant si ce mot apparat dans le tableau [girafe, chien, hippopotame, singe, chat , chien].
Indiquer galement le nombre doccurences de ce mot dans le tableau.
titre dexemple, si lutilisateur saisit chien, alors le programme doit afficher chien apparat
2 fois. Si lutilisateur saisit lapin, le programme doit afficher lapin napparat pas dans la
liste.
Exercice 19 :
Ecrivez un programme qui permet de tester si un mot est un palindrome, cest--dire si sa
lecture de gauche droite donne le mme rsultat que sa lecture de droite gauche. Par exemple,
radar et rotor sont des palindromes.
Bases de la programmation
54
1re anne
Chapitre 5
Fonctions
5.1
Introduction
Avec les fonctions nous abordons un autre point essentiel de la conception des programmes.
Nous avons vu dans les cours prcdents :
les squences dinstructions qui sont la base dun programme ; elles indiquent lenchanement des instructions, instruction aprs instruction,
les alternatives qui permettent de choisir dexcuter ou pas une squence dinstruction(s)
suivant le rsultat de lvaluation dune condition (expression boolenne),
les boucles qui permettent de rpter une squence dinstruction(s) tant quune condition
est vrifie (expression boolenne).
Il sagit dans les trois cas de tronons de code qui ne sont utilisables quune fois au sein
du programme ; ds que ces tronons sont excuts le programme se poursuit pour excuter les
instructions suivantes. On dit que ces tronons logiciels ne sont pas rutilisables.
Les fonctions permettent, elles, de raliser plusieurs fois le mme tronon de code au sein dun
programme. Vous connaissez, par exemple, les fonctions raw_input() et print() qui permettent
respectivement de saisir ou dafficher une chane de caractres lcran.
1
2
3
55
IUT de Villetaneuse
5.2
5.2.1
1
2
3
4
5
6
7
Pour dfinir une fonction en Python, on utilise le mot-cl def. Si lon souhaite que cette fonction
renvoie une valeur, on utilise le mot-cl return Notez que la syntaxe du def utilise les :, comme
dans le cas boucles et des alternatives, un bloc dinstructions est donc attendu. Lindentation de
ce bloc dinstructions, qui forme le corps de la fonction, est obligatoire.
Une fonction est appele avec des arguments ou non : lutilisateur fournit ou non des donnes
la fonction, et le droulement de celle-ci ne sera pas le mme suivant les donnes fournies.
Dans lexemple de la fonction print() vu prcdemment cest le message afficher qui reprsente largument et suivant la valeur de ce dernier la fonction print() naffichera pas la mme
chose. On peut remarquer que la fonction print() nattend quun seul argument.
Les noms de variables placs en argument pourront ainsi dsigner chaque appel des valeurs
diffrentes ; on ne peut donc pas prjuger de leurs valeurs lors de lcriture de la fonction cest
pour cela que ces arguments sappellent des paramtres formels : ils nont pas encore de
contenu.
Lors de lutilisation dune dune fonction, lutilisateur fournit les valeurs des arguments.
Prenons un exemple :
1
2
3
def somme(x,y) :
z = x + y
return z
4
5
a = 7.3
b = 5.2
print(somme(a,b))
7
8
# Affiche 12.5
56
1re anne
Departement informatique
resultat=somme(7.3,5.2)
print(resultat) # Affiche 12.5
Notez quune fonction ne prend pas ncessairement dargument et ne renvoie pas forcment une
valeur. Toutefois il faut, lors de sa dfinition, mettre des parenthses aprs le nom de la fonction.
Comme cette fonction nadmet pas darguments, aucun nom de paramtre formel nest donn entre
les parenthses. Par exemple :
1
2
def affiche_bonjour() :
print(Bonjour)
Lors de lappel dune fonction sans argument on doit galement taper les parenthses.
Exemple dutilisation :
affiche_bonjour()
Laffichage produit est le suivant :
Bonjour
Dans cet exemple, la fonction ne prend aucun argument et ne renvoie aucun rsultat, se contentant
dafficher la chane de caractre Bonjour lcran. cela na donc pas de sens de vouloir rcuprer
dans une variable le rsultat renvoy par une telle fonction.
Il est galement possible de renvoyer une liste de rsultats que le programme appelant affectera
autant de variables :
1
2
3
4
5
6
7
u,v = quotientreste(1253,87)
print(quotient : + str(u) + reste : +str(v) ) #affiche quotient : 14 reste : 35
5.2.2
Il est trs important lorque lon manipule des fonctions de connatre la porte des variables.
Variables locales
On peut crer des variables au sein dune fonction qui ne seront pas visible lextrieur de
celle-ci ; on les appelle variables locales Par exemple
1
2
3
def affiche_somme(x,y) :
z = x + y
print(la somme vaut + str(z))
4
5
affiche_(somme(7.3,5.2))
print(str(z))
57
Bases de la programmation
IUT de Villetaneuse
def incrementer(x):
x=x+1
# la fonction modifie le contenu du paramtre formel
print(str(x))
#
nbre=4
print(nbre)
# affiche 4
incrementer(nbre) # affiche 5
print(nbre) # # affiche 4
, le paramtre effectif na pas t modifi !
3
4
5
6
7
txt=[bonsoir, Jean]
print(txt)
# affiche [bonsoir, Jean]
changeEnPlace(txt, 1)
print(txt)
# affiche [bonsoir, Jacques]
def bonjour(nom):
s = bonjour + nom # cration de la nouvelle chane de caractres
return s
# on renvoie la chane rsultante
4
5
message = bonjour(Dupond)
6
7
5.2.3
Exemples de fonctions
Le corps de la fonction est la tche que doit accomplir la fonction. Les paramtres formels
y sont utiliss comme des variables initialises. Les variables introduites dans le corps de la
Bases de la programmation
58
1re anne
Departement informatique
fonction sont des variables locales, elles ne sont connues et utilisables que dans le corps de la
fonction. Ds que la fonction se termine, les paramtres formels et les variables locales sont
dtruits.
Remarquez que, dans le corps dune fonction, il est possible dappeler dautres fonctions ; dans
ce cas le corps de la fonction jouera le rle de programme appelant.
Pour crire les fonctions, deux rgles essentielles sont respecter :
1. Concevoir la fonction pour quon puisse lutiliser commodment dans un maximum de situations (contextes),
2. Bien expliquer et documenter ce quattend la fonction et ce quelle fait.
1. Nous souhaitons crire une fonction qui trouve le plus grand lment dun tableau de valeurs.
(a) Comment appeler la fonction, quels sont ses paramtres formels, que renvoie la fonction ?
i. le nom de la fonction doit indiquer ce que fait la fonction, choisissons le nom :
chercheMaxTab(),
ii. la fonction a besoin de parcourir un tableau afin de rechercher la plus grande valeur.
A chaque appel de la fonction, le contenu et la taille du tableau peut changer. On
en dduit quil y a un paramtre formel de type tableau. Il ny a pas de
paramtre pour la taille du tableau, parce quen Python, la fonction len() permet
de lobtenir.
iii. aprs avoir trouv la valeur maximale, la fonction doit communiquer cette valeur
au programme appelant, donc la fonction doit se terminer par un return suivi du
nom de la variable locale contenant le maximum.
(b) Que doit faire la fonction ? Cest dans cette tape quon crit le corps de la fonction.
On pourra constater aprs analyse que nous utiliserons :
une variable locale plusGd qui contiendra la valeur la plus grande du tableau ; au
dpart elle sera initialise avec la premire valeur du tableau,
une autre variable locale i qui correspondra lindice courant du tableau, au dpart
elle sera initialise 1, car la case dindice 0 a dj t traite (voir point prcdent),
il faudra utiliser une itrative permettant de comparer chaque case du tableau avec
la variable plusGd pour retenir chaque fois le maximum.
(c) Voici une version qui remplit le cahier des charges :
1
def chercheMaxTab(tab):
plusgd = tab[0]
i = 1
while i < len(tab):
if tab[i] > plusgd :
plusgd = tab[i]
i = i + 1
return plusgd
4
5
6
7
8
9
10
11
12
13
14
15
16
17
59
Bases de la programmation
IUT de Villetaneuse
1
def ouiNon():
#renvoie une rponse controle, soit o pour oui, soit n pour non
4
5
6
7
8
9
10
11
12
13
14
15
16
17
5.3
5.3.1
if choix==o :
print(C\est la clef de la reussite)
else :
print(il n\est jamais trop tard !)
Dans tous les langages, on peut utiliser des fonctions crites par les autres, et qui sont disponibles dans des bibliothques.
Pour chaque langage, il existe une bibliothque standard, qui est accessible sans quil faille
le prciser. En Python, les bibliothques sappellent des modules ; la bibliothque standard est le
noyau. La directive import est ncessaire pour utiliser les fonctions qui sont dans une bibliothque
autre que le noyau. Par exemple, pour avoir accs aux fonction de la librairie mathmatique (math)
, vous devez spcifier que cette librairie doit tre utilise, en crivant linstruction suivante au dbut
de votre programme : from math import *.
Pour le langage C, ce sont des options lors de ldition des liens qui permettent de les utiliser,
associes la directive #include<descripteur de bibliothque> (voir cours sur le C qui sera
abord ultrieurement)).
Le programmeur peut crer ses propres bibliothques pour permettre leur rutilisation par
dautres programmeurs.
5.3.2
Un dernier point auquel il faut faire attention : chaque fois que lon appelle une fonction,
son code sexcute, et cela peut comporter beaucoup doprations. Il vaut mieux en tenir compte
quand on programme. Voici un exemple pour illustrer le problme.
On veut crire une fonction qui normalise le tableau reu en argument - cest dire qui divise
tout par un mme nombre pour que la somme du nouveau tableau soit 1 (cest une fonction trs
banale). La fonction sappelle normalise(t), voici une premire faon de lcrire.
1
2
3
4
5
def somme(t):
s=0
for n in t :
s+=n
return(s)
6
7
8
9
10
def normalise(t):
i=0
while(i<len(t)):
t[i] = t[i] / somme(t)
Bases de la programmation
60
1re anne
Departement informatique
Cette criture est trs maladroite : dans normalise(), chaque boucle while on calcule somme(t),
et le rsultat est toujours le mme. Il vaudrait mieux le calculer une fois pour toutes. Amliorer
le codage est simple :
1
2
3
4
5
def somme(t):
s=0
for n in t :
s+=n
return(s)
6
7
8
9
10
11
def normalise(t):
s=somme(t)
i=0
while(i<len(t)):
t[i] = t[i] / s
Si vous regardez bien les oprations faites par les deux versions :
le nombre doprations (additions) de somme() est la taille de t
dans la premire version, chaque boucle while fait un nombre doprations gal 1 + le
nombre doprations de somme()
dans la deuxime version, chaque boucle while fait une opration
le nombre de boucles while est le mme dans les deux cas
Quand on travaille sur un tableau de 1000 nombres, ce calcul donne pour la premire version
1001000 oprations, et pour la seconde 2000 oprations ! ! !
I Sur ce thme : Exercices 8 10, TD 5
1re anne
61
Bases de la programmation
IUT de Villetaneuse
TD6 : Fonctions
62
1re anne
Departement informatique
tableau dentiers.
Voici un exemple daffichage a obtenir :
Avant decalage circulaire
[12, 21, 10, 11, 0, 1, 6,
Apres decalage circulaire
[8, 12, 21, 10, 11, 0, 1,
a droite
8]
a droite
6]
nBin=10000001
nDec = bin2Dec(nBin)
print(Le nombre binaire (code entier naturel) + str(nBin)+ se convertit en base 10 : + str(n
Question 10.2 : Du dcimal vers le binaire.
crire une fonction qui calcule lcriture en base 2 dun nombre entier positif pass en argument
sous sa forme dcimale.
Le rsultat pour 5 sera 101.
1re anne
63
Bases de la programmation
IUT de Villetaneuse
TP6 : Fonction
Question 11.1 : crire une fonction permettant la tortue de dessiner un carr de cot n.
Question 11.2 : La tortue est positionne au coin infrieur gauche et regarde vers le haut. crire
une fonction qui fera dessiner la tortue la figure suivante. Les paramtres de la fonction sont la
longueur du cot du plus petit carr et la diffrence entre les longueurs des cots des diffrents
carrs.
Question 11.3 : crire une fonction permettant de dessiner un rectangle. Utiliser cette fonction
pour dessiner la figure suivante avec la tortue. Les longueurs des cots des rectangles seront choisies
par lutilisateur.
Bases de la programmation
64
1re anne
Departement informatique
sachant que
la tortue est place dans le coin suprieur gauche du carr interne et quelle regarde vers le
haut.
le nombre de carrs tracer est demand lutilisateur (4 dans lexemple ci-dessus)
la longueur du cot du carr le plus petit ( lintrieur) est demand lutilisateur et la
longueur du cot de chaque autre carr est gale au double de la longueur du cot du carr
juste en dessous. On utilisera pour dessiner les carrs la fonction dfinie lExercice 11.
le segment qui relie chaque carr est de longueur fixe et gale au cot du plus petit carr et
forme un morceau de la diagonale de chaque carr.
Question 11.5 : Carr de carrs.
1. crire un fonction permettant de dessiner p carrs de cot n les uns la suite des autres.
On utilisera pour dessiner chaque petit carr la fonction dfinie dans lExercice 11
2. crire un programme qui permet de dessiner avec la tortue la figure suivante :
65
Bases de la programmation
IUT de Villetaneuse
pondant la moyenne des lments du tableau. Vous pourrez vous aider du code vu lors des TD
sur les tableaux.
Question 12.2 : Dfinissez une fonction tabCarre(tab) dun argument de type tableau, contenant des valeurs numriques (int ou float). Le tableau initial ne sera pas modifi par la fonction.
La fonction renverra le tableau des carrs des lments du tableau intial. Vous pourrez initialiser
un tableau vide, puis, au moyen de la concatnation remplir le tableau avec les carrs. Pour lever
un nombre au carr vous utiliserez une fonction carre() que vous dfinirez. Les deux fonctions
carre() et tabCarre() devront donc tre dfinies dans le mme fichier.
Question 12.3 : Dfinissez une fonction variance( tab ) permettant de calculer la variance des
valeurs du tableau. On rappelle que la formule de la variance pour une distribution X = {xi } est :
PN
PN
(xi )2
)2
i=1 (xi x
= i=1
x
2 ,
V =
N
N
o x
est la moyenne de la distribution X = {xi }.
La variance est donc gale la moyenne des carrs moins le carr de la moyenne. Vous utiliserez
les fonctions carre(), moyenne() et tabCarre() dfinies prcdemment. Les 4 fonctions devront
donc tre crites dans le mme fichier.
= 1
= 2
* 7
* 7
= 10
* 7
= 100 * 7
66
1re anne
Departement informatique
Cette librairie dfinit entre autres choses les fonctions cosinus et sinus, respectivement nommes : cos() et sin(), et la constante , nomme pi. Les quations paramtriques dfinissant un
cercle de centre (a, b) et de rayon R, sont les suivantes :
x = a + R cos()
y = b + R sin()
Question 14.1 : Dfinissez une fonction de deux paramtres pointCercle(angle,r), renvoyant
les coordonnes dun point du cercle de centre (0, 0) et de rayon r. Les coordonnes seront renvoyes
dans un tableau de 2 lments.
1re anne
67
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
68
1re anne
Chapitre 6
Boucles imbriques
Le but de ce chapitre est dapprendre analyser un problme contenant des rptitions imbriques et utiliser des boucles imbriques pour traiter ces configurations.
6.1
Nous avons dj vu que toute squence dinstruction(s) peut tre imbrique dans une autre
instruction structure et nous avons dj rencontr lexemple dun choix imbriqu dans un choix
ou dun choix imbriqu dans une boucle. Nous allons examiner ici des situations dimbrications de
boucles. Pour cela il existe 2 itratives(en ralit 3) :
la boucle while, dite boucle conditionnelle ; elle est utilise lorsque le nombre ditration(s)
nest pas connu lavance et peut tre de 0, Par exemple les instructions :
1
2
3
4
5
6
1
2
3
la boucle for, dite boucle inconditionnelle ; elle est utilise lorsque le nombre ditration(s)
est connu lavance. Par exemple les instructions :
x=2
for i in range(0,2) :
print(x)
Ecrivent deux fois la valeur de x.
Pour allez plus loin, il existe une troisime forme de boucle : La boucle do while, dite boucle
conditionnelle ; elle est utilise lorsque le nombre ditration(s) nest pas connu lavance et
est au moins de 1. Cette boucle nest pas implmente en Python mais existe dans de
nombreux langages.
Voici une version en langage C de cette boucle :
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <string.h>
int main(void){
char choix[20]; /* permet de stocker une suite de caractre(s) */
do {
printf("entrez oui ou non"); /* cest le print du C */
scanf("%s", choix); /* cest le raw_input() du C */
} while (strcmp(choix,"oui")!=0 || strcmp(choix,"oui")!=0);
69
IUT de Villetaneuse
10
11
12
13
Comparez avec la forme while (en faisant abstraction de la synthaxe du C)... Et vous verrez
lintrt de la boucle do while.
Sachez matriser dj les deux premire forme de boucles, ce sera dj trs bien !
Remarque : La boucle for en Python est un peu particulire, car elle utilise loprateur in
qui permet de parcourir un tableau ("pour chaque lment de ce tableau...") et cest la taille de
ce dernier qui fixe le nombre ditration(s) (la taille du tableau). Dans beaucoup dautres langages "historiques" comme le C, loprateur in nexiste pas, et cest lutilisation dun compteur
"classique" qui fixe ce nombre ditration(s). Algorithmiquement, la dfinition dune boucle inconditionnelle se rapproche de la vision historique.
6.2
6.2.1
Pourquoi imbriquer des boucles ? Pour la mme raison quon imbrique des alternatives. Une
alternative permet de traiter une situation, un cas de figure.
Par exemple : "est-ce un homme ou une femme ?" peut trs bien se subdiviser en dautres cas
"a-t-il plus ou moins de 18 ans ?".
De mme, une boucle, cest un traitement systmatique, un examen dune srie dlments un par
un, par exemple, "prenons tous les employs de lentreprise un par un". Eh bien, on peut imaginer
que pour chaque lment ainsi considr, pour chaque employ par exemple, on doive procder
un examen systmatique dautre chose, prenons chacune des commandes que cet employ a trait.
Voil un exemple typique de boucles imbriques : on devra programmer une boucle principale
(celle qui prend les employs un par un) et lintrieur, une boucle secondaire (celle qui prend
les commandes de cet employ une par une). Dans la pratique de la programmation, la matrise
des boucles imbriques est ncessaire, mme si elle nest pas suffisante.
En conclusion, imbriquer des boucles cest crire une boucle lintrieure dune autre boucle.
Dans la suite nous allons tudier quelques exemples de boucles imbriques sachant quil existe une
multitude de combinaisons.
6.2.2
70
1re anne
Departement informatique
4x9=36
4x10=40
Ici encore, plutt que dessayer dcrire directement le dtail du programme, il peut tre prfrable de procder par tape. Par exemple, nous pouvons dire que, globalement, notre programme
doit crire les 9 tables de multiplication de 1 9 et quil doit donc se prsenter ainsi :
1
2
1
2
3
Attention ! Comme i donne le numro de table, il ne faut pas le modifier lintrieur du corps de
cette boucle. Le contenu de la rptition reste prciser et, pour linstant, nous lavons simplement
mentionn sous la forme dun commentaire. Pour crire la table i, nous pouvons procder ainsi :
print(TABLE de + str(i))
for j in range(1,11) : # j varie de 1 10
// crire la ligne j de la table i
1
2
3
Il ne nous reste plus qu prciser comment crire une ligne dune table, ce qui peut se formuler
ainsi :
print(str(i)+x+str(j)+=+str(i*j))
1
2
3
4
La dmarche utilise est dite dmarche descendante : elle consiste dcomposer le problme pos
en sous-problmes plus faciles rsoudre, puis dcomposer son tour chaque sous-problme... et
ceci jusqu ce que lon arrive une solution entirement formule (nous reviendrons sur ce point
la fin de ce cours).
6.2.3
print(donnez un entier :)
x = int(raw_input())
while x!=0 :
for i in range(0,2) :
print(merci pour + str(x))
print(donnez un entier :)
x = int(raw_input())
Le while permet de rpter la squence qui en dpend et cela autant de fois que ncessaire...
Jusqu ce que lutilisateur entre une valeur pour x gale 0,
le corps de la boucle permet dafficher deux fois la valeur saisie par lutilisation dune boucle
inconditionnelle (boucle for), puis de saisir la prochaine valeur pour x.
1re anne
71
Bases de la programmation
IUT de Villetaneuse
Si nous excutons ces instructions avec les valeurs 3, 5 et 0, nous obtenons ceci :
donnez un entier : 3
merci pour 3
merci pour 3
donnez un entier : 5
merci pour 5
merci pour 5
donnez un entier : 0
6.2.4
: 12.00
llve numro 2 (-1 pour finir)
llve numro 25 (-1 pour finir)
: 10.00
Compte tenu de la complexit du programme, nous pouvons chercher, dans un premier temps,
crire les seules instructions de calcul de la moyenne dun lve, en supposant que son numro
figure dans une variable nomme i :
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
if nb > 0 :
print(moyenne des + str(nb)+ notes : + str(somme/nb)
Pour obtenir le programme dsir, il nous suffit maintenant de rpter les instructions prcdentes, en utilisant la variable i comme compteur, variant de 1 25.
Voici le programme complet :
for i in range(1,25): # i varie de 1 25
print(donnez les notes de llve numro +str(i) + (-1 pour finir))
somme = 0
nb = 0
note = float(raw_input())
while note >=0 :
Bases de la programmation
72
1re anne
Departement informatique
7
8
9
10
11
Remarque : Faites bien attention la place des deux initialisations somme=0.0 et nb=0. Elles
doivent figurer dans la boucle inconditionnelle gouverne par le compteur i et avant la boucle
conditionnelle de prise en compte des diffrentes notes.
6.2.5
1
2
3
4
5
6
########################################################################
# verifiePresenceRoi(i,j)
#i : dsigne lindice de la ligne de lchiquier (indice commence 0)
#j : dsigne lindice de la colonne de lchiquier (indice commence 0)
#valeur retourne : True si un roi a t trouv, False sinon
########################################################################
Remarque : Utilisez des cartouches pour documenter vos fonctions.
Le cahier des charges : Nous souhaitons trouver lindice de la ligne et lindice de la colonne du
premier roi trouv.
1. il est clair quil faut parcourir chaque ligne de lchiquier... et de sarrter ds
quon trouve un roi ! : "tant que je nai pas parcouru toutes les lignes ET que je nai pas
trouv de roi ! ",
2. pour chaque ligne, il faut parcourir les cases... et sarrter ds quon trouve un roi ! :
"tant que je nai pas parcouru tous les lments de la ligne courante ET que je nai pas trouv
de roi !,
On abouti quelque chose comme suit :
1
2
i=0
j=0
3
4
trouve = False
# tant que je nai pas parcouru toutes les
5
6
#tant que je nai pas parcouru tous les lments de la ligne courante
# ET que je nai pas trouv de roi !
#je cherche
#et javance dune colonne
# et javance dune ligne
10
11
12
le commentaire je cherche doit tre substitu par une instruction qui consulte lespace deux
dimensions et qui indique si linformation cherche est trouve ou pas pour la ligne dindice
i et la colonne dindice j.
1
trouve = verifiePresenceRoi(i,j)
1re anne
73
Bases de la programmation
IUT de Villetaneuse
1
2
j = j +1
pour avancer dune ligne, il suffit dincrmenter i,
i = i +1
Nous obtenons finalement lalgorithme suivant :
i=0
j=0
3
4
trouve = False
7
8
9
10
11
12
Ds que que la variable trouve devient True, on sort "naturellement" des deux boucles imbriques car la condition boolenne trouve==False devient False.
6.2.6
Il existe une multitude dautrse exemples de combinaisons dimbrications de boucles (avec les
boucles for et while). Il existe aussi une "infinit" de niveaux dimbrications. Prenons un dernier
exemple pour illustrer notre propos. Le but de cet anodin algorithme est de trouver pour quelles
valeurs de A, B et C, A 100 + B 10 + C = A3 + B 3 + C 3 (ABC reprsentant un nombre dcimal).
La recherche sera limite pour chaque valeur entire comprise entre 1 et 10 (bien entendu, vous
pouvez augmenter lintervalle). Lalgorithme ncessite trois boucles pour chacune des valeurs. Cest
bien entendu au sein de la dernire boucle que les valeurs sont calcules et les rsultats affichs en
cas dgalit.
1
2
3
4
5
6
7
for a in range(1,11):
for b in range(1,11):
for c in range(1,11):
nb1= a*100+b*10+c
nb2 = a*a*a+b*b*b+c*c*c
if nb1==nb2:
print (a=+str(a) + b=+str(b) + c=+str(c))
6.2.7
1
2
3
4
Si nous nous concentrons sur les fonctionnalits des deux deux boucles imbriques on pourrait
crire : "je parcours les tables de 1 9 (compteur i) et pour chaque table i, je laffiche".
On pourrait dfinir une fonction qui permettrait dafficher nimporte quelle table k sans
prjuger de qui lutilisera :
Bases de la programmation
74
1re anne
Departement informatique
1
2
3
4
5
def afficheTable(k) :
for i in range(1,11) : # i varie de 1 10
print(str(k)+x+str(i)+=+str(k*i))
Remarque :
Bienvenue dans le monde de la dcomposition fonctionnelle (dmarche descendante) qui
consiste dcouper un problme en fonction(s) ; la dfinition de la fonction afficheTable()
permet de simplifier lalgorithme initial mais surtout permet la rutilisation de cette fonction
dans dautres contextes,
vous remarquez que la fonction afficheTable() masque limbrication des boucles ayant
pour rsultat une fois de plus de simplifier un algorithme,
souvenez-vous, lors de la sance 1, nous avions affirm quun problme peut tre rsum
par une squence ordonnanant des actions plus ou moins complexe entreprendre (lordre
dappel de fonctions), cest lessence mme de la dcomposition fonctionnelle dun cahier des
charges.
Remarque : Une rgle de "bonne" programmation consiste ne jamais crire un traitement de
plus dune page ; dans ce cas, le dcomposer en appels de fonctions dont on sait ce que chacune
fait.
1re anne
75
Bases de la programmation
IUT de Villetaneuse
i=0 p=0
i=0.05 p=0
i=0.10 p=0
i=0.15 p=0
u=0.5 i=0
p=0
u=0.5 i=0.05 p=0.025
u=0.5 i=0.10 p=0.050
u=0.5 i=0.15 p=0.075
********************
pour n=2
pour n=3
pour n=4
*
**
*
**
***
*
**
***
****
2. Ecrire une fonction qui prendra comme paramtre la hauteur et qui affiche la figure suivante.
Les symboles utiliss sont des toiles (*) et des traits(-).
Exemple. La hauteur est 5
*---**--***-**********
3. crire une fonction qui affiche un triangle rectangle dont la hauteur et la base dpendent
dun entier n (pass en paramtre).
Exemples :
pour n=1
*
**
*
pour n=2
Bases de la programmation
pour n=3
*
76
1re anne
Departement informatique
**
***
*
**
pour n=4
***
****
4. crire une fonction qui affiche un triangle isocle dont la hauteur dpend dun entier n (pass
en paramtre).
Exemples :
pour n=1
pour n=2
pour n=3
pour n=4
*
***
*
***
*****
*
***
*****
*******
5. crire une fonction qui affiche un losange dont la longueur des diagonales (nombre impair)
dpend dun entier n (pass en paramtre). Dans le cas o n est pair, la fonction affichera
un message derreur.
Exemples :
pour n=1
pour n=3
pour n=5
*
***
*
*
***
*****
***
*
pour n=7
*
***
*****
*******
*****
***
*
77
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
78
1re anne
Chapitre 7
Ce tableau contient 4 lignes et 4 colonnes, donc cest un tableau 2 dimensions. Pour accder
un lment il faut spcifier un couple dindices (deux dimensions, donc deux indices) :
Le premier indice indique le numro de la ligne
IUT de Villetaneuse
Il est important de retenir que pour un tableau de dimension n m, les indices des
lignes et des colonnes varient respectivement de 0 n 1 et de 0 m 1.
Comme les tableaux une dimension, un tableau multidimensionnel est dfini par les symboles
[ et ]. Entre ces crochets figurent les indices qui permettent de parcourir le tableau. Chaque ligne
du tableau peut tre vue comme un tableau une dimension. En reprenant les notations du cours
sur les tableaux une dimension, nous pouvons crire chaque ligne du tableau comme une liste
Python, par exemple :
1
2
3
4
5
Puis, il faut crer une nouvelle liste Python contenant les lignes qui ont t dfinies
Tableau = [[4, 22, 55, 32], [5, 23, 34, 4 ], [2, 2.4, 2, 12], [23, 44, 55, 77]]
Ainsi, en Python, un tableau plusieurs dimensions peut tre implant comme une liste de
listes. Un tableau deux dimensions est une liste de lignes. On peut accder chaque ligne
sparment :
1
2
1
2
print(Tableau[0])
print(Tableau[2])
on obtient laffichage
Chaque ligne est une liste de cellules individuelles. Cela nous permet dutiliser la notation
Tableau [i] [j] qui signifie que nous choisissons la ligne i, et seulement la colonne j de cette ligne.
1
2
print(Tableau[0][0])
print(Tableau[1][2])
1
2
on obtient laffichage
4
34
Bases de la programmation
80
1re anne
Departement informatique
Il est possible de manipuler des tableaux contenant des chanes de caractres ou mme des
valeurs de diffrents types (string, integer, float).
1
2
3
4
5
on obtient laffichage suivant
Omar
7.1
Parcourir un tableau deux dimensions peut tre fait naturellement avec deux boucles imbriques : une sur les lignes et une sur les colonnes. Il est possible dutiliser la commande range()
pour parcourir successivement les indices de chaque cellule du tableau. Lexemple suivant permet
de parcourir les lments du tableau en utilisant deux boucles while :
1
2
3
4
5
6
7
i = 0
while i < len(Tableau):
j = 0
while j < len(Tableau[i]):
print(Tableau[i][j])
j += 1
i += 1
1
2
3
Lexemple suivant permet de parcourir les lments du tableau en les mettant zro :
for r in range(len(Tableau)):
for c in range(len(Tableau[r])):
Tableau[r][c]= 0
4
5
print(Tableau)
1
2
1
2
3
4
Laffichage du tableau sous forme dune liste de listes est un peu difficile lire. La boucle
suivante permet dafficher la table dans une forme plus lisible.
for ligne in Tableau:
print (ligne)
On obtient laffichage suivant :
7.2
81
Bases de la programmation
IUT de Villetaneuse
1
2
3
for r in range(3):
for c in range(3):
matrice[r][c]= r+c
4
5
print (matrice)
1
2
3
Comme pour un tableau une dimension, linterprteur ne peut pas crire dans une case qui
na pas t cre linitialisation de matrice. Nous avons plusieurs possibilits pour crire cette
initialisation :
dfinir explicitement la matrice comme une liste de listes dlment.
1
1
2
3
1
2
En utilisant loprateur de rptition * et la boucle for, nous pouvons construire une liste
de listes.
A = [0]*3 # cre les A[i] initialiss 0
for i in range(3):
A[i] = [0] * 3 # remplace chaque A[i] par un tableau
En Python, nous pouvons construire un tableau en utilisant la fonction range() et la
boucle for lintrieur des crochets (on appelle cela une liste dfinie en comprhension).
Lexemple suivant cre une table comme une liste de listes et en mme temps remplit chaque
cellule de la table.
matrice= [ [ 0 for i in range(3) ] for j in range(3) ]
print (matrice)
Cette instruction doit tre lue partir de lintrieur vers lextrieur, comme une expression
ordinaire. La liste intrieure, [0 for i in range (3)], cre une simple liste de trois zros. La liste extrieure, [[...] for j in range (3)] cre trois exemplaires de ces listes
internes. Dans des cas plus compliqus, au lieu du 0, on peut utiliser une expression qui
dpend de i et j . . .
Il y a bien sr dautres critures possibles en combinant autrement les 3 mthodes ci-dessus.
7.3
Bases de la programmation
82
1re anne
Departement informatique
2
6
3
6
0
3
2
6
3
1
5
6
7
6
4
2
6
3
6
0
3
2
6
3
1
5
6
7
8
4
Donner un algorithme qui permet de calculer la moyenne par colonne. Les valeurs des moyennes
seront sauvegardes dans une liste. Ensuite, indiquer lindice de la colonne correspondant la plus
grande moyenne.
11
44
90
78
45
12
67
55
1re anne
78
56
89
34
---\
---/
10
11
45
78
23
44
12
56
56
90
67
89
47
78
55
34
83
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
84
1re anne
Departement informatique
1re anne
85
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
86
1re anne
Chapitre 8
Introduction
Rappels...
Une chane de caractres est une suite ordonne de caractres. Cette suite est dlimite par
deux apostrophes . Une chane de caractres nest pas modifiable.
Exemples de chanes littrales :
bonjour est une chanes de caractres contenant 7 caractres.
est la chane de caractres vide contenant 0 caractre.
Initialisation dune variable partir dune chane de caractres littrale. Nous pouvons
initialiser une variable avec une chane de caractres littrale, cette variable sera de type chane
de caractres.
Exemple :
1
2
3
87
IUT de Villetaneuse
Noter le caractre \ avant lapostrophe de Lhiver qui permet dchapper le caractre pour
quil ne soit pas interprt comme un dlimiteur de chanes de caractres. Pour viter lutilisation
de caractres dchappement vous pouvez utiliser les guillemets " pour dlimiter la chane de
caractres.
Exemple :
1
2
3
Initialisation dune variable partir dune autre variable. Nous pouvons affecter une
variable partir dune autre variable de type chane de caractres.
1
2
3
4
6
7
8
9
#affiche :
#Lhiver approche, vite vite, il faut se couvrir des morsures du froid. Couvrons nous!
# Oui, couvrons nos oreilles!
Les chanes de caractres vues comme des tableaux. Les chanes de caractres sont analogues aux tableaux de caractres, ceci prs quelles ne sont plus modifiables aprs leur initialisation : seule la lecture des caractres de la chane de caractres est autorise.
Note : Mme si les chanes de caractres peuvent tre soumises une partie des oprations
prvues pour les tableaux, elle ne sont pas de "type" tableau, cest--dire que abc est diffrent
de [a, b, c] : le second est modifiable, pas le premier.
1
2
3
4
5
6
7
8
1
2
3
Il faut alors bien distinguer les oprations qui recopient le tableau de celles qui le modifient. Par
exemple
mot=abc
mot=mot + d # correct parce que + cre une nouvelle chane
list.insert(mot, 0, e) # erreur parce que list.insert() modifie son premier argument
88
1re anne
Departement informatique
8.2
1re anne
89
Bases de la programmation
IUT de Villetaneuse
TD9 : Chanes
Pour tous les exercices qui suivent, vous prvoirez des jeux dessais probants qui permettront
de tester les fonctions crites.
1
2
conduiront laffichage suivant :
9
-1
1
2
conduiront laffichage suivant :
8
-1
90
1re anne
Departement informatique
1re anne
91
Bases de la programmation
IUT de Villetaneuse
TP9 : Chaines
Bases de la programmation
92
1re anne
Departement informatique
balDebut = head>
flag,balFin = construitBaliseFin(balDebut)
print(str(flag)+ + balFin)
Prvoyez les affichages qui doivent tre obtenus
3. crire une fonction paireBalises() qui, prenant deux balises b1, b2 en paramtre, retourne
True si la balise b2 est la balise de fin correspondant la balise de dbut b1, retourne False
sinon.
Donnez les jeux dessai ncessaires.
Exercice 9 :
crire une fonction qui indique si une chane de caractres reprsentant une expression parenthse est syntaxiquement correcte du point de vue des parenthses ou pas. La fonction renvoie
-1 si lexpression est correcte et la position de la premire erreur si lexpression est incorrecte.
Exemple :
pour
pour
pour
pour
pour
1re anne
93
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
94
1re anne
Chapitre 9
Dictionnaires
9.1
9.1.1
Introduction
Prsentation
Les dictionnaires sont des structures de donnes qui, comme les tableaux, permettent de stocker
des collections de valeurs. Ils sont utiles dans de nombreuses situations o les tableaux noffrent
plus assez de souplesse ou dexpressivit pour structurer un jeu de donnes. La particularit principale qui distingue les dictionnaires des tableaux, est que les donnes sont stockes sous forme de
couples (clef-valeur).
9.1.2
On rappelle que dans les tableaux les valeurs sont dans lordre. On peut donc accder une
valeur en indiquant sa position au moyen dun indice :
tab_astro :
indice
valeur
0
Terre
1
Lune
2
Soleil
1
2
print( tab_astro[1] )
Lune
Dans un dictionnaire il ny a pas de notion dordre et donc pas de position. Pour accder une valeur il faut un autre moyen. Ce moyen, cest une clef unique associe chaque valeur
lors de la dfinition du dictionnaire.
dico_astro :
clef
valeur
Planete
Terre
1
2
Satellite
Lune
Etoile
Soleil
print( dico_astro[Satellite] )
Lune
Les dictionnaires sont aussi appels tableaux associatifs dans le sens o ils associent des valeurs
des clefs (et non des positions). Dans le dictionnaire dico_astro prcdent, trois couples
clef-valeur sont dfinis : Planete-Terre, Satellite-Lune et Etoile,Soleil.
95
IUT de Villetaneuse
On accde donc diffremment aux valeurs stockes dans un tableau et dans un dictionnaire.
La faon dont on veut accder aux valeurs stockes va conditionner le choix entre une structure
de donnes ou lautre.
Pour certains jeux de donnes, lutilisation dun tableau est naturelle car il y a une correspondance simple entre la valeur et sa position. Pour dautres jeux de donnes, cette correspondance
nest pas vidente. Dans de nombreux cas il sera avantageux dutiliser des dictionnaires.
9.2
1
dico_astro2 = {}
dico_astro2[Planete]
= Terre
dico_astro2[Satellite]
= Lune
dico_astro2[Etoile]
= Soleil
print( str( dico_astro2 ) )
{Planete: Terre, Satellite: Lune, Etoile: Soleil}
9.3
Nous avons vu dans lintroduction que les clefs des dictionnaires jouent en quelque sorte le rle
des indices dans les tableaux :
les clefs permettent daccder une valeur stocke dans le dictionnaire,
les clefs permettent de modifier une valeur stocke dans le dictionnaire.
Pour illustrer ces cas nous utiliserons les tableaux et le dictionnaires dcrits prcdemment dans
lintroduction et dont la syntaxe de dfinition littrale est la suivante :
1
tab_astro = [Terre,Lune,Soleil]
2
3
Bases de la programmation
96
1re anne
Departement informatique
9.3.1
Dans un tableau la valeur correspondant lindice de position i est accessible en faisant suivre
le nom du tableau de lindice donn entre crochets.
1
2
Dans un dictionnaire cest la mme chose, la diffrence que lindice de position est remplac
par la clef.
1
2
Lorsquon appelle une valeur dun tableau avec un indice qui dpasse sa taille, linterprteur
affiche un message derreur.
1
2
3
4
tab_astro[100]
Traceback (innermost last):
File "<stdin>", line 1, in ?
IndexError : list index out of range
Il en est de mme si on utilise une clef non contenue dans le dictionnaire lors dun appel de
valeur.
1
2
3
4
dico_astro[Galaxie]
Traceback (most recent call last ):
File "<stdin>", line 1, in <module>
KeyError: Galaxie
9.3.2
Pour modifier une valeur dans un tableau il suffit daffecter une nouvelle valeur une certaine
position en spcifiant lindice de position.
1
2
3
4
tab_astro[0] = Mars
5
6
7
De la mme faon, dans un dictionnaire il suffit daffecter une nouvelle valeur une clef :
1
2
3
4
dico_astro[Planete] = Mars
5
6
7
1re anne
97
Bases de la programmation
IUT de Villetaneuse
9.3.3
Pour ajouter une valeur dans un tableau il est possible dutiliser la concatenation de tableau.
Lajout dune valeur modifie alors la taille du tableau.
1
2
3
4
5
6
7
Pour ajouter une valeur dans un dictionnaire il suffit daffecter une valeur une clef non encore
utilise :
1
2
3
4
5
6
7
Il faut remarquer ici que la syntaxe utilise pour ajouter une valeur un dictionnaire est la
mme que celle employe pour modifier la valeur associe une clef existante. Pour ajouter une
valeur (ou plus exactement ajouter un couple clef-valeur), il faut imprativement que la clef ne
soit pas encore utilise dans le dictionnaire. En dautres termes,
si on utilise une clef existante, la syntaxe conduit changer la valeur associe la clef, et le
dictionnaire ne change pas de taille,
si on utilise une nouvelle clef, la syntaxe ajoute un couple clef-valeur au dictionnaire et
augmente sa taille.
9.4
9.4.1
Dans certains cas il peut tre utile davoir accs la liste des clefs dun dictionnaire. Cela est
ralis par la fonction dict.keys(dico) qui renvoie un tableau dont les lments sont les clefs du
dictionnaire dico.
1
2
3
4
Ici, les trois clefs du dictionnaire sont renvoyes dans le tableau [Planete, Satellite,
Etoile].
Attention :
On rappelle encore quil ny pas de notion dordre dans les dictionnaires. Le tableau
retourn par la fonction dict.values() ne traduit pas lordre dans lequel les couple
clef-valeur ont t dfinis...
Bases de la programmation
98
1re anne
Departement informatique
9.4.2
Dans dautres cas on peut souhaiter parcourir toutes les valeurs dun dictionnaire indpendamment des clefs auxquelles elles sont associes. Cela est possible en utilisant la fonction dict.values(dico)
qui renvoie un tableau contenant les valeurs du dictionnaire dico.
1
2
3
4
Ici, les valeurs correspondant aux 3 clefs du dictionnaire sont renvoyes dans la liste [Terre,
Lune, Soleil].
Attention (encore) :
On rappelle quil ny pas de notion dordre dans les dictionnaires. Le tableau retourn
par la fonction dict.keys() ne traduit pas lordre dans lequel les couple clef-valeur
ont t dfinis...
9.4.3
dict.has_key(mon_dico, cl) : Est une fonction boolenne qui renvoie True si le dictionnaire
mon_dico a la clef cl et False sinon.
1
2
3
4
5
Dans le premier cas, la fonction renvoie True car le dictionnaire comporte la clef Etoile et
False dans le second cas car la clef Galaxie est absente du dictionnaire.
I Sur ce thme : Exercice 2, TD
I Sur ce thme : Exercice 3, TD
I Sur ce thme : Exercice 4, TD
9.4.4
del( dico_astro[Planete] )
2
3
4
9.5
9.5.1
Comme pour les tableaux, il est possible dutiliser comme clef dun dictionnaire la valeur affecte une variable.
1re anne
99
Bases de la programmation
IUT de Villetaneuse
1
c = Etoile
2
3
4
Ici, la clef c contient la valeur Etoile. La commande dico_astro[ c ] sera donc interprte
comme la commande dico_astro[ Etoile ].
9.5.2
Pour aller plus loin : Les clefs doivent tre des constantes
semaine = {}
2
3
semaine[1] = lundi
# Integer
4
5
6
7
8
Ici, le dictionnaire semaine admet la clef 1 de type entier et la clef Couleur de type chane
de caractres.
Cependant, une limitation importante concernant les clefs des dictionnaires est quelles doivent
correspondre des types constants. Par exemple, un entier, un flottant, un boolen, une chane
de caractres sont des constantes et peuvent tre utiliss comme une clef de dictionnaire.
1
2
3
4
5
dico = {}
dico[12735]=Diameter
dico[ 6367.5] = Radius
dico[True]=Vrai
dico[Nom] = Gaia
#
#
#
#
Integer
Float
Boolean
String
6
7
8
Par contre, les tableaux ou les dictionnaires ne sont pas des constantes puisque leur contenu
est susceptible dtre modifi. Les utiliser comme clef de dictionnaire provoquera alors un message
derreur.
1
2
3
planete = {}
4
5
6
7
8
Ceci explique lintrt des tuples. On rappelle que les tuples sont des sortes de tableaux
constants, non-modifiables. Il est donc possible de les utiliser comme clef dans un dictionnaire :
1
2
3
planete = {}
Bases de la programmation
100
1re anne
Departement informatique
4
5
9.6
Comme pour les tableaux, les valeurs stockes dans un dictionnaire peuvent tre de types
diffrents, sans aucune contrainte. Une valeur dun dictionnaire peut donc tre un nombre entier
ou flottant, une chane de caractres, un boolen mais aussi des collections contenant dautres
valeurs comme un tableau ou un autre dictionnaire. Par exemple, le dictionnaire suivant contient
des donnes htrognes :
clef
valeur
type
Satellites
Rayon
6378.137
<int>
<float>
Tellurique
indice
0
1
2
True
<bool>
<list>
Oceans
valeur
Pacifique
Atlantique
Indien
Superficie
clef
valeur
Pacifique
49.7
Atlantique
29.5
Indien
20.4
<dict>
1
2
3
4
5
6
terre = {}
terre [Satellites]
terre [Rayon]
terre [Tellurique]
terre [Oceans]
terre [Superficie]
=
=
=
=
=
1
6378.137
True
[Pacifique, Atlantique, Indien]
{Pacifique:49.7, Atlantique:29.5,Indien:20.4}
7
8
9
10
11
12
13
Dans le cas o une valeur du dictionnaire est elle mme une collection, il doit tre possible
daccder une valeur de cette collection. La syntaxe est la mme que pour accder une valeur
dans un tableau multi-dimensionnel.
Ainsi, partir du tableau prcdent, pour accder la superficie de locan indien on utilise la
syntaxe suivante :
1
2
En effet, le dictionnaire planete admet pour clef Superficie qui pour valeur un dictionnaire. Lexpression planete[Superficie] est donc un dictionnaire qui lui-mme pour clef la
chane de caractre Indien et dont la valeur est 20.4.
De faon analogue, pour accder au nom du premier ocan, on utilise la syntaxe suivante :
1
2
1re anne
101
Bases de la programmation
IUT de Villetaneuse
En effet, le dictionnaire planete admet pour clef Oceans qui pour valeur un tableau.
Lexpression planete[Ocean] est donc un tableau dont le premier lment est Pacifique.
I Sur ce thme : Exercice 5, TD
9.7
Bases de la programmation
Tableau
t=[]
t = [ val_1, val_2, . . .]
t[ indice ]
t = t + [ nlle_val ]
t[ indice ] = nlle_val
len( t )
del( t[ indice ] )
102
Dictionnaire
d={}
d = { clef_1 :val_1 , clef_2 :val_2 , . . .}
d[ clef ]
d[ nlle_clef ] = nlle_val
d[ clef ] = nlle_val
len( d )
del( d[ clef ] )
1re anne
Departement informatique
TD10 : Dictionnaires
Mercure
0
Venus
0
Terre
1
Mars
2
Jupiter
63
Saturne
61
Uranus
27
Neptune
11
Proposez un jeu de tests permettant de vrifier que le dictionnaire est correctement dfini.
103
Bases de la programmation
IUT de Villetaneuse
Figure
As
Roi
Dame
Valet
Dix
Neuf
Huit
Sept
Nb de points
lAtout
11
4
3
20
10
14
0
0
Nb de points
Autre Couleur
11
4
3
2
10
0
0
0
1. Dfinissez 2 dictionnaires Atout et Autre dont les couples (clef,valeur) sont respectivement
la figure porte par la carte et le nombre de points associs cette figure lorsquelle est de
la couleur de latout ou dune autre couleur.
2. Dfinissez une fonction comptage() prenant comme paramtre les 2 dictionnaires, une couleur datout et un ensemble de cartes. La fonction renvoie le nombre de points associs cet
ensemble de cartes. Les cartes seront passes comme une liste de tuples dont
la premire valeur correspond la figure de la carte (As, Roi, Dame, Valet, Dix, Neuf,
Huit, ou Sept) et
la deuxime valeur correspond la couleur de la carte (Pic, Coeur, Carreau, Trefle)
3. Calculez le nombre de points que les joueurs se partagent au cours dune partie sachant que
10 points sont accords lquipe qui remporte le dernier tour de jeu,
4. Dfinissez une fonction affiche_carte_point qui prend comme argument les 2 dictionnaires
et la couleur datout et affiche lensemble des 32 cartes et leur valeur.
Exercice 5 :
Les ARN sont forms dune squence de "bases" prises parmi un alphabet de 4 lettres (A, U,
C, G).
Les protines sont forment une squence dacides amins pris parmi un alphabet de 20 lettres.
On considrera que chaque ARN peut tre traduit en protine si lon connait le code de conversion
appel "code gntique".
Pour traduire un ARN en protine, on dcoupe la squence dARN en groupe de 3 bases (un
codon). A chaque codon correspond un acide amin unique. Traduire une squence dARN en
protine et vice versa est donc un exercice de r-criture.
Par exemple, si lon considre la squence AUG GUU AGG UUG UGA dARN, celle-ci est traduite par
la squence dacide amine suivante : MVRLLe dtail de la traduction est donn par le tableau suivant :
ARN
Code gntique
Acide Amins
code 3 lettres
code 1 lettre
codon1
AUG
codon2
GUU
codon3
AGG
codon4
UUG
codon5
UGA
Par exemple, le premier codon dARN AUG, code pour lacide amin Mthionine, dont le nom
abrg une lettre est M.
Afin de pouvoir travailler sur un vrai code gntique, vous allez devoir tlcharger un fichier
contenant le code et le lire dans Python. Le fichier qui vous est donn la forme suivante :
1
2
3
4
5
AAA
AAC
AAG
AAT
ACA
K
N
K
N
T
Bases de la programmation
104
1re anne
Departement informatique
6
7
8
9
10
...
UUA
UUC
UUG
UUU
L
F
L
F
3
4
5
6
7
8
105
Bases de la programmation
IUT de Villetaneuse
1
2
Valeur
<float>
<int>
<string>
Pour paramtrer le dictionnaire renvoy, la fonction demandera lutilisateur de saisir itrativement au clavier, les diffrentes valeurs.
Question 6.2 : Dfinissez le programme principal permettant, de saisir plusieurs rfrences, puis
en fin de saisie, dafficher le montant total du stock.
Question 6.3 : Pour aller plus loin, vous pourrez enrichir le programme principal de fonctionnalits telles que :
supprimer une rfrence du stock,
modifier la quantit dune rfrence,
Afficher ltat du stock,
...
Bases de la programmation
106
1re anne
Chapitre 10
Tri
10.1
Trier un tableau, cest le modifier pour que ses lments soient rangs dans lordre croissant.
Par exemple, le tableau
[3, 9, 5, 6, 1]
devient, ue fois tri :
[1, 3, 5, 6, 9]
Lordre entre les chanes de caractres est alphabtique, si bien quun tableau comme
devient une fois tri :
Il existe de nombreux algorithmes diffrents pour trier des algorithmes. Les algorithmes sont
plus ou moins difficiles comprendre, et plus ou moins efficaces. Parmi les algorithmes facilement
comprhensibles, mais peu efficaces ds que la taille du tableau trier augmente, notons :
Tri bulles
Tri par insertion
Parmi les algorithmes avancs et efficaces avec des tableaux de grande taille, notons :
Tri fusion (merge sort)
Tri rapide (quick sort)
Tri par tas (heap sort)
10.2
IUT de Villetaneuse
10.3
Parmi les algorithmes de tri faciles mettre en oeuvre, le tri par insertion est le plus efficace
avec des tableaux de petite taille. Lide est simple :
On considre chaque lment du tableau, en partant du premier. Ceci constitue une premire
boucle sur les lments du tableau.
A chaque tape, lobjectif est dinsrer llment considr sa place parmi ceux qui prcdent. Il faut pour cela trouver quel endroit llment doit tre insr en le comparant aux
autres, puis dcaler les lments afin de pouvoir effectuer linsertion. En pratique, ces deux
actions sont frquemment effectues en une passe, qui consiste faire remonter llment
au fur et mesure jusqu rencontrer un lment plus petit.
Considrons par exemple le tableau [9, 6, 1, 4, 8]. A la premire tape, on considre llment 6 et on le place sa place parmi les lments prcdents, cest dire en toute premire
position :
A la seconde tape, cest llment 1 que lon considre. Pour le faire remonter jusqu sa
place, on dcale le 9 puis le 6 vers la droite, puis on met le 1 en premire position :
A la troisime tape, cest le 4 que lon considre. Le 9 puis le 6 sont dcals, mais pas le 1 car
sa valeur est infrieure. La place du 4 est donc lancienne position du 6. On linsre ici :
Le tri par insertion nest pas efficace ds que les tableaux sont grands. En revanche, il reste
trs efficace pour de petits tableaux et avec des tableaux plus grands, mais presque ordonns.
I Sur ce thme : Exercice 1, TP 10
10.4
10.4.1
Dans le chapitre sur les tableaux, nous avons introduit la fonction range() qui permet de crer
des tableaux dentiers (et dentiers uniquement) de manire simple et rapide. Elle fonctionne sur le
Bases de la programmation
108
1re anne
Departement informatique
modle : range([dbut,] fin[, pas]). Elle cre alors un tableau contenant tous les entiers entre
dbut compris et fin non compris, selon le pas pas. Les arguments entre crochets sont optionnels.
Si largument dbut nest pas spcifi, il est alors considr comme gal 0. Si le pas pas nest
pas spcifi, il est alors considr comme gal 1. Attention, si seulement deux arguments sont
spcifis, ils correspondent alors aux arguments dbut et fin. En excutant le code
1
2
3
4
5
1
2
3
4
5
print(range(0,10))
print(range(10))
print(range(15,21))
print(range(0,1000,100))
print(range(2,-5,-1))
on obtient laffichage
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[15, 16, 17, 18, 19, 20]
[0, 100, 200, 300, 400, 500, 600, 700, 800, 900]
[2, 1, 0, -1, -2, -3, -4]
10.4.2
Tranches de tableaux
Avec une syntaxe proche de celle de la fonction range() on peut extraire un sous-tableau dun
tableau. Plus prcisment, si tab est un tableau alors tab[[dbut]: fin[: pas]] est le soustableau de tab forms des lments compris entre tab[dbut] compris et tab[fin] non compris,
selon le pas pas. Les arguments entre crochets sont optionnels. Si largument dbut nest pas
spcifi, il est alors considr comme gal 0. Si le pas pas nest pas spcifi, il est alors considr
comme gal 1. Attention, si seulement deux arguments sont spcifis, ils correspondent alors
aux arguments dbut et fin. En excutant le code
1
2
3
4
1
2
3
tab=range(0,10)
print(tab)
print(tab[5:8])
print(tab[1:10:2])
on obtient laffichage
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 6, 7]
[1, 3, 5, 7, 9]
10.5
En Pyhton, on peut utiliser le module time pour dterminer avec prcision le temps dexcution
dun programme. Pour ce faire, il faut placer import time en dbut de programme. On utilisera la
fonction time.clock() qui retourne un nombre flottant (float exprimant le nombre de secondes
coules depuis une origine dpendant du systme dexploitation utilis).
Mais cette origine importe peu quand on veut mesurer le temps dexcution dune fonction :
il suffira denregistrer ce qui est renvoy par time.clock() avant lexcution, puis aprs, et enfin
de faire la diffrence des deux temps. Pour afficher le nombre de secondes ncessaires lexcution
de la fonction test(), par exemple, on peut crire
1
2
3
4
t1=time.clock()
test ()
t2=time.colck()
print(t2-t1)
1re anne
109
Bases de la programmation
IUT de Villetaneuse
Ce faisant, on affiche un nombre de secondes avec de nombreux chiffres aprs la virgule (lchelle
de prcision de time.clock() est de lordre de la micro-seconde). La plupart les fonctions seffectuant en quelques millisecondes, on prfre souvent afficher un nombre millisecondes.
A cet effet, rappelons la possibilit de formater laffichage des nombres flottants dans la fonction
print().
Bases de la programmation
110
1re anne
Departement informatique
1
2
1
2
3
4
5
Question 1.3 : Excutez des tris par insertion de tableaux alatoires de longueurs diffrentes. En
1 minute peu prs, combien dlments est-il possible de trier ?
111
Bases de la programmation
IUT de Villetaneuse
Bases de la programmation
112
1re anne
Chapitre 11
Rvisions
Les trois premiers exercices constituaient le sujet du controle long de janvier 2011
Exercice 1 : Index
On se propose de raliser une sorte dindex. Pour cela, on passera par les tapes suivantes (les
questions sont indpendantes).
Question 1.1 : crire une fonction code_a qui tant donne une chaine de caractres, calcule
la somme des codes ASCII de ses lettres. En Python la fonction ord renvoie le code ASCII du
caractre pass en argument.
Exemple : code_a("jussieu")= 106+117+115+115+105+101+117=776
Question 1.2 : crire une fonction separateur qui, tant donne une chaine de caractres,
remplace tous les caractres non alphabtiques par un espace. En Python la fonction, isalpha
renvoie True si son argument est constitu de caractres alphabtiques et False sinon.
Exemple : Il sen allait ruminant son bonheur, comme ceux qui machent encore, apres son
diner, le gout des truffes quils digerent.
Aprs lappel de la fonction sparateur :
Il s en allait ruminant son bonheur comme ceux qui machent encore apres son diner le gout
des truffes qu ils digerent.
Question 1.3 : On suppose que la fonction code_a ne renvoie jamais la mme valeur pour deux
mots diffrents. On dfinit un tableau de comptage : cest--dire un tableau dentiers dont les
indices varient entre 1 et M, o M est lentier maximum que lon peut obtenir par la fonction
code_a. Autrement dit, chaque indice correspond la reprsentation dun mot par la valeur
que renvoie la fonction code_a. Le contenu de chaque case de ce tableau reprsente le nombre
doccurrences du mot correspondant ;
crire un programme de comptage : tant donn un tableau t de mots (chaines de caractre)
suppos rempli et reprsentant un texte. Ce programme remplit un tableau de comptage C, en
indiquant pour chaque mot son nombre doccurrences dans le texte.
Exemple : Si le mot "bonheur" apparait 3 fois dans le tableau t et code_a("bonheur")=755.
La case C[755] doit avoir la valeur 3.
Question 1.4 : On souhaite pouvoir savoir quel mot du tableau t correspond chacune des
valeurs prises par la fonction code_a. cette fin, on dfinit un tableau de dcodage de la mme
taille que le tableau de comptage, chaque indice correspond la valeur prise par la fonction code_a
et la case correspondante contient la chane de caractres qui a ce code_a sil y en a une dans t,
la chane vide sinon.
crire un programme de dcodage : tant donn un tableau t de mots (chaines de caractre)
suppos rempli et reprsentant un texte. Ce programme remplit un tableau de dcodage D, en
plaant chaque mot de t dans la case dindice son code_a et en sassurant que les autres cases
113
IUT de Villetaneuse
7
8
9
10
11
12
13
14
15
16
17
18
19
def grandRemplace(tab):
for i in range (0, len(tab)-1):
if tab[i]>tab[i+1] :
tab[i+1]=tab[i]
return tab
20
21
22
23
24
25
26
27
print("debut")
str1 ="abc"
str2 ="def"
str3 =grandAbsorbe(str1, str2)
print(str1)
print(str2)
print(str3)
28
29
30
31
32
33
str1 ="abc"
str2 ="def"
( str1 , str2)=petitAbsorbe( str1 , str2)
print(str1)
print(str2)
34
35
36
37
38
39
t1=[2, 1, 4, 3]
print(t1)
t2=grandRemplace(t1)
print(t1)
print(t2)
Question 2.2 : crire grandRemplace2 qui renvoie le nombre dlments modifis par grandRemplace
dans tab. Quels sont les tableaux tab pour lesquels grandRemplace2 renvoie 0 ?
Question 2.3 : crire une fonction grandRemplace3 qui renvoie le mme rsultat que grandRemplace
mais qui ne modifie pas son argument.
114
1re anne
Departement informatique
ci-dessous.
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
Question 3.1 : On souhaite connatre la rpartition prcise des notes qui ont t donnes, cest-dire le nombre de fois que chaque note a t donne. crire une fonction qui retourne un tableau
de 21 lments indics de 0 20 dont la n-ime composante contiendra le nombre de fois o la
note n a t donne.
Question 3.2 : On souhaite connatre les notes qui ont t donnes le plus et moins frquemment.
crire une fonction qui partir dun tableau de notes affiche les notes qui ont t donnes le plus
et le moins souvent ainsi que le nombre de fois quelles ont t donnes. Utiliser cette fonction pour
afficher les notes donnes le plus et le moins frquemment, ainsi que le nombre de fois quelles ont
t utilises dans le cas de lenqute mentionne ci-dessus.
Lexemple a t choisi afin que le maximum et le minimum des frquences soient uniques.
Question 3.3 : Afin davoir une vision plus prcise, on souhaite obtenir le pourcentage de personnes tant trs satisfaites (note entre 16 et 20), plutt satisfaites (note entre 11 et 15), plutt
insatisfaites (note entre 6 et 10) et pas du tout satisfaites (note entre 0 et 5). Pour cela, crer une
fonction prenant en paramtre le tableau retourn par la fonction de la question 1 et retournant
un tableau de 4 cases, chaque case contenant le pourcentage de satisfaction.
Question 3.4 : Pour simplifier la lecture des rsultats, crire les pourcentage de satisfaction sous
la forme de graphique selon :
Tres satisfaites
Plutot satisfaites
Plutot instatisfaites
Tres insatisfaites
:
:
:
:
*******************************
***********************
**********************
**********************
115
Bases de la programmation
IUT de Villetaneuse
On rappelle que quand le paramtre pass la fonction int est un nombre rel ( virgule
flottante) x , la fonction retourne la partie entire de x.
def augmente1(x):
x+=1
3
4
def augmente2(x):
Bases de la programmation
116
1re anne
Departement informatique
return x+1
6
7
8
9
def augmente3(x):
x+=1
return x
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
print("debut")
y=1
augmente1(y)
print(y) # 1er print
x=1
augmente1(x)
print(x) # 2e print
augmente2(y)
print(y) # 3e print
x=augmente2(x)
print(x) # 4e print
y=augmente3(x)
print(x) # 5e print
print(y) # 6e print
45
46
47
48
49
50
51
52
print("diminue1")
t=range(5, 10)
tab=t
print(t) # 7e print
print(tab) # 8e print
diminue1(t, x)
print(t) # 9e print
53
54
55
56
print("diminue2")
diminue2(t, x)
print(tab) # 10e print
57
58
59
60
61
print("diminue3")
t=diminue3(t, x)
print(t) # 11e print
print(tab) # 12e print
62
1re anne
117
Bases de la programmation
IUT de Villetaneuse
63
64
65
print("diminue4")
diminue4(tab, x)
print(tab) # 13e print
Bases de la programmation
118
1re anne