Chapitre 5 : Principaux types de données▲
Dans le chapitre 2, nous avons déjà manipulé des données de différents types : des nombres entiers ou réels, et des chaînes de caractères. Il est temps à présent d'examiner d'un peu plus près ces types de données, et également de vous en faire découvrir d'autres.
5.1. Les données numériques▲
Dans les exercices réalisés jusqu'à présent, nous avons déjà utilisé des données de deux types : les nombres entiers ordinaires et les nombres réels (aussi appelés nombres à virgule flottante). Tâchons de mettre en évidence les caractéristiques (et les limites) de ces concepts :
5.1.1. Les types « integer » et « long »▲
Supposons que nous voulions modifier légèrement notre précédent exercice sur la suite de Fibonacci, de manière à obtenir l'affichage d'un plus grand nombre de termes. A priori, il suffit de modifier la condition de bouclage, dans la deuxième ligne. Avec « while c< 49: » , nous devrions obtenir quarante-huit termes. Modifions donc légèrement l'exercice, de manière à afficher aussi le type de la variable principale :
>
>
>
a, b, c =
1
, 1
, 1
>
>
>
while
c<
49
:
print
c, "
:
"
, b, type
(b)
a, b, c =
b, a+
b, c+
1
...
...
... (affichage des 43
premiers termes)
...
44
: 1134903170
<
type
'
int
'
>
45
: 1836311903
<
type
'
int
'
>
46
: 2971215073
<
type
'
long
'
>
47
: 4807526976
<
type
'
long
'
>
48
: 7778742049
<
type
'
long
'
>
Que pouvons-nous constater ?
Si nous n'avions pas utilisé la fonction type(), qui nous permet de vérifier à chaque itération le
type de la variable b, nous n'aurions rien remarqué du tout : la suite des nombres de Fibonacci
s'affiche sans problème (et nous pourrions encore l'allonger de nombreux termes supplémentaires).
Il semble donc que Python soit capable de traiter des nombres entiers de taille illimitée.
L'exercice que nous venons de réaliser indique cependant qu'il se passe « quelque chose »
lorsque ces nombres deviennent très grands. Au début du programme, les variables a, b et c sont
définies implicitement comme étant du type integer. C'est ce qui se passe toujours avec Python
lorsqu'on affecte une valeur entière à une variable, à condition que cette valeur ne soit pas trop
grande. Dans la mémoire de l'ordinateur, ce type de donnée est en effet encodé sous la forme d'un
bloc de 4 octets (ou 32 bits). Or la gamme de valeurs décimales qu'il est possible d'encoder sur 4
octets seulement s'étend de -2147483648 à + 2147483647 (Voir cours d'informatique générale).
Les calculs effectués avec ce type de variable sont toujours très rapides, parce que le processeur
de l'ordinateur est capable de traiter directement par lui-même de tels nombres entiers à 32 bits. En
revanche, lorsqu'il est question de traiter des nombres entiers plus grands, ou encore des nombres
réels (nombres « à virgule flottante »), les logiciels que sont les interpréteurs et compilateurs
doivent effectuer un gros travail de codage/décodage, afin de ne présenter en définitive au
processeur que des opérations binaires sur des nombres entiers de 32 bits au maximum.
Vous savez déjà que le type des variables Python est défini de manière dynamique.
Puisqu'il s'agit du type le plus performant (aussi bien en termes de vitesse de calcul qu'en termes
d'occupation de place dans la mémoire), Python utilise le type integer par défaut, chaque fois que
cela est possible, c'est-à-dire tant que les valeurs traitées sont des entiers compris entre les limites
déjà mentionnées plus haut (environ 2 milliards, en positif ou en négatif).
Lorsque les valeurs traitées sont des nombres entiers se situant au-delà de ces limites, leur
encodage dans la mémoire de l'ordinateur devient plus complexe. Les variables auxquelles on
affecte de tels nombres sont alors automatiquement définies comme appartenant au type « entier
long » (lequel est désigné par long dans la terminologie Python).
Ce type long permet l'encodage de valeurs entières avec une précision quasi infinie : une valeur
définie sous cette forme peut en effet posséder un nombre de chiffres significatifs quelconque, ce
nombre n'étant limité que par la taille de la mémoire disponible sur l'ordinateur utilisé !
Exemple :
>
>
>
a, b, c =
3
, 2
, 1
>
>
>
while
c <
15
:
print
c, "
:
"
, b
a, b, c =
b, a*
b, c+
1
1
: 2
2
: 6
3
: 12
4
: 72
5
: 864
6
: 62208
7
: 53747712
8
: 3343537668096
9
: 179707499645975396352
10
: 600858794305667322270155425185792
11
: 107978831564966913814384922944738457859243070439030784
12
: 64880030544660752790736837369104977695001034284228042891827649456186234
582611607420928
13
: 70056698901118320029237641399576216921624545057972697917383692313271754
88362123506443467340026896520469610300883250624900843742470237847552
14
: 45452807645626579985636294048249351205168239870722946151401655655658398
64222761633581512382578246019698020614153674711609417355051422794795300591700
96950422693079038247634055829175296831946224503933501754776033004012758368256
>
>
>
Dans l'exemple ci-dessus, la valeur des nombres affichés augmente très rapidement, car chacun
d'eux est égal au produit des deux termes précédents.
Au départ, les variables a, b et c sont du type integer, puisqu'on leur affecte des petites valeurs
numériques entières : 3, 2 et 1. A partir de la 8e itération, cependant, les variables b et a sont
automatiquement converties l'une après l'autre dans le type long : le résultat de la multiplication des
termes 6 et 7 est en effet déjà bien supérieur à la limite des 2 milliards évoquée plus haut.
La progression continue avec des nombres de plus en plus gigantesques, mais la vitesse de calcul
diminue. Les nombres mémorisés sous le type long occupent une place variable dans la mémoire de
l'ordinateur, en fonction de leur taille.
5.1.2. Le type « float »▲
Vous avez déjà rencontré précédemment cet autre type de donnée numérique : le type « nombre
réel », ou « nombre à virgule flottante », désigné en anglais par l'expression « floating point
number », et que pour cette raison on appellera type float sous Python.
Ce type autorise les calculs sur de très grands ou très petits nombres (données scientifiques, par
exemple), avec un degré de précision constant.
Pour qu'une donnée numérique soit considérée par Python comme étant du type float, il suffit
qu'elle contienne dans sa formulation un élément tel qu'un point décimal ou un exposant de 10.
Par exemple, les données :
3.14 | 10. | .001 | 1e100 | 3.14e-10 |
sont automatiquement interprétées par Python comme étant du type float.
Essayons donc ce type de données dans un nouveau petit programme (inspiré du précédent) :
>
>
>
a, b, c =
1
., 2
., 1
#
=>
a
et
b
seront
du
type
'float'
>
>
>
while
c <
18
:
... a, b, c =
b, b*
a, c+
1
... print
b
2
.0
4
.0
8
.0
32
.0
256
.0
8192
.0
2097152
.0
17179869184
.0
3
.6028797019e+
16
6
.18970019643e+
26
2
.23007451985e+
43
1
.38034926936e+
70
3
.07828173409e+
113
4
.24910394253e+
183
1
.30799390526e+
297
Inf
Inf
Comme vous l'aurez certainement bien compris, nous affichons cette fois encore une série dont
les termes augmentent extrêmement vite, chacun d'eux étant égal au produit des deux précédents.
Au huitième terme, nous dépassons déjà largement la capacité d'un integer. Au neuvième terme,
Python passe automatiquement à la notation scientifique (« e+n » signifie en fait : « fois dix à
l'exposant n »). Après le quinzième terme, nous assistons à nouveau à un dépassement de capacité
(sans message d'erreur) : les nombres vraiment trop grands sont tout simplement notés « inf » (pour
« infini »).
Le type float utilisé dans notre exemple permet de manipuler des nombres (positifs ou négatifs)
compris entre 10-308 et 10308 avec une précision de 12 chiffres significatifs. Ces nombres sont
encodés d'une manière particulière sur 8 octets (64 bits) dans la mémoire de la machine : une partie
du code correspond aux 12 chiffres significatifs, et une autre à l'ordre de grandeur (exposant de 10).
(5) Exercices :
5.1. Écrivez un programme qui convertisse en radians un angle fourni au départ en degrés,
minutes, secondes.
5.2. Écrivez un programme qui convertisse en degrés, minutes, secondes un angle fourni au
départ en radians.
5.3. Ecrivez un programme qui convertisse en degres Celsius une temperature exprimee au
depart en degres Fahrenheit, ou l'inverse.
La formule de conversion est : TF=TC X 1,8 +32
5.4. Écrivez un programme qui calcule les intérêts accumulés chaque année pendant 20 ans, par
capitalisation d'une somme de 100 euros placée en banque au taux fixe de 4,3 %
5.5. Une légende de l'Inde ancienne raconte que le jeu d'échecs a été inventé par un vieux sage,
que son roi voulut remercier en lui affirmant qu'il lui accorderait n'importe quel cadeau en
récompense. Le vieux sage demanda qu'on lui fournisse simplement un peu de riz pour ses
vieux jours, et plus précisément un nombre de grains de riz suffisant pour que l'on puisse en
déposer 1 seul sur la première case du jeu qu'il venait d'inventer, deux sur la suivante,
quatre sur la troisième, et ainsi de suite jusqu'à la 64e case.
Écrivez un programme Python qui affiche le nombre de grains à déposer sur chacune des
64 cases du jeu. Calculez ce nombre de deux manières :
- le nombre exact de grains (nombre entier)
- le nombre de grains en notation scientifique (nombre réel)
5.2. Les données alphanumériques▲
Jusqu'à présent nous n'avons manipulé que des nombres. Mais un programme d'ordinateur peut également traiter des caractères alphabétiques, des mots, des phrases, ou des suites de symboles quelconques. Dans la plupart des langages de programmation, il existe pour cet usage une structure de données que l'on appelle chaîne de caractères (ou string en anglais).
5.2.1. Le type « string » (chaîne de caractères)▲
Sous Python, une donnée de type string est une suite quelconque de caractères délimitée soit par
des apostrophes (simple quotes), soit par des guillemets (double quotes).
Exemples :
>
>
>
phrase1 =
'
les
oeufs
durs
.
'
>
>
>
phrase2 =
'
"
Oui
"
,
répondit
-
il
,
'
>
>
>
phrase3 =
"
j
'
aime
bien
"
>
>
>
print
phrase2, phrase3, phrase1
"
Oui
"
, répondit-
il, j'
aime
bien
les
oeufs
durs
.
Les 3 variables phrase1, phrase2, phrase3 sont donc des variables de type string
Remarquez l'utilisation des guillemets pour délimiter une chaîne dans laquelle il y a des
apostrophes, ou l'utilisation d'apostrophes pour délimiter une chaîne qui contient des guillemets.
Remarquez aussi encore une fois que l'instruction print insère un espace entre les éléments affichés.
Le caractère spécial « \ » (antislash) permet quelques subtilités complémentaires :
- En premier lieu, il permet d'écrire sur plusieurs lignes une commande qui serait trop longue pour tenir sur une seule (cela vaut pour n'importe quel type de commande).
- A l'intérieur d'une chaîne de caractères, l'antislash permet d'insérer un certain nombre de codes spéciaux (sauts à la ligne, apostrophes, guillemets, etc.). Exemples :
>
>
>
txt3 =
'
"
N\
'
est
-
ce
pas
?
"
répondit
-
elle
.
'
>
>
>
print
txt3
"
N
'
est
-
ce
pas
?
"
répondit-
elle.
>
>
>
Salut =
"
Ceci
est
une
chaîne
plutôt
longue\n
contenant
plusieurs
lignes
\
.
.
.
de
texte
(
Ceci
fonctionne\n
de
la
même
façon
en
C
/
C
+
+
.
\n\
.
.
.
Notez
que
les
blancs
en
début\n
de
ligne
sont
significatifs
.
\n
"
>
>
>
print
Salut
Ceci est une chaîne plutôt longue
contenant plusieurs lignes de texte (Ceci fonctionne
de la même façon en C/
C+
+
.
Notez que les blancs en début
de ligne sont significatifs.
Remarques :
- La séquence \n dans une chaîne provoque un saut à la ligne.
- La séquence \' permet d'insérer une apostrophe dans une chaîne délimitée par des apostrophes
- Rappelons encore ici que la casse est significative dans les noms de variables (Il faut respecter scrupuleusement le choix initial de majuscules ou minuscules).
« Triple quotes » :
Pour insérer plus aisément des caractères spéciaux ou « exotiques » dans une chaîne, sans faire
usage de l'antislash, ou pour faire accepter l'antislash lui-même dans la chaîne, on peut encore
délimiter la chaîne à l'aide de triples guillemets ou de triples apostrophes :
>
>
>
a1 =
"""
...
Usage:
trucmuche[OPTIONS]
...
{
-h
...
-H
hôte
...
}"""
>>>
print
a1
Usage
:
trucmuche
[
OPTIONS
]
{
-
h
-
H
hôte
}
5.2.2. Accès aux caractères individuels d'une chaîne▲
Les chaînes de caractères constituent un cas particulier d'un type de données plus général que
l'on appelle des données composites. Une donnée composite est une entité qui rassemble dans une
seule structure un ensemble d'entités plus simples : dans le cas d'une chaîne de caractères, par
exemple, ces entités plus simples sont évidemment les caractères eux-mêmes. En fonction des
circonstances, nous souhaiterons traiter la chaîne de caractères, tantôt comme un seul objet, tantôt
comme une collection de caractères distincts. Un langage de programmation tel que Python doit
donc être pourvu de mécanismes qui permettent d'accéder séparément à chacun des caractères d'une
chaîne. Comme vous allez le voir, cela n'est pas bien compliqué :
Python considère qu'une chaîne de caractères est un objet de la catégorie des séquences,
lesquelles sont des collections ordonnées d'éléments. Cela signifie simplement que les caractères
d'une chaîne sont toujours disposés dans un certain ordre. Par conséquent, chaque caractère de la
chaîne peut être désigné par sa place dans la séquence, à l'aide d'un index.
Pour accéder à un caractère bien déterminé, on utilise le nom de la variable qui contient la
chaîne, et on lui accole entre deux crochets l'index numérique qui correspond à la position du
caractère dans la chaîne.
Attention, cependant : comme vous aurez l'occasion de le vérifier par ailleurs, les données
informatiques sont presque toujours numérotées à partir de zéro (et non à partir de un). C'est le cas
pour les caractères d'une chaîne.
Exemple :
>
>
>
ch =
"
Stéphanie
"
>
>
>
print
ch[0
], ch[3
]
S p
5.2.3. Opérations élémentaires sur les chaînes▲
Python intègre de nombreuses fonctions qui permettent d'effectuer divers traitements sur les
chaînes de caractères (conversions majuscules/minuscules, découpage en chaînes plus petites,
recherche de mots, etc.). Nous approfondirons ce sujet un peu plus loin (voir page 121).
Pour l'instant, nous pouvons nous contenter de savoir qu'il est possible d'accéder
individuellement à chacun des caractères d'une chaîne, comme cela a été expliqué ci-dessus.
Sachons en outre que l'on peut aussi :
assembler plusieurs petites chaînes pour en construire de plus grandes. Cette opération s'appelle concaténation et on la réalise sous Python à l'aide de l'opérateur + (Cet opérateur réalise donc l'opération d'addition lorsqu'on l'applique à des nombres, et l'opération de concaténation lorsqu'on l'applique à des chaînes de caractères. Exemple :
Sélectionneza
=
'
Petit
poisson
'
b=
'
deviendra
grand
'
c=
a+
bprint
c petit poisson deviendra grand-
déterminer la longueur (c'est-à-dire le nombre de caractères) d'une chaîne, en faisant appel à la fonction intégrée len() :
Sélectionnez>
>
>
print
len
(c)29
-
Convertir en nombre véritable une chaîne de caractères qui représente un nombre. Exemple :
Sélectionnez>
>
>
ch=
'
8647
'
>
>
>
print
ch+
45
=
=
>
*
*
*
erreur*
*
*
on ne peut pas additionner une chaîne et un nombre>
>
>
n=
int
(ch)>
>
>
print
n+
65
8712
#
OK
:
on
peut
additionner
2
nombres
Dans cet exemple, la fonction intégrée int() convertit la chaîne en nombre entier. Il serait également possible de convertir une chaîne en nombre réel à l'aide de la fonction float().
Exercices :
5.6. Écrivez un script qui détermine si une chaîne contient ou non le caractère « e ».
5.7. Écrivez un script qui compte le nombre d'occurrences du caractère « e » dans une chaîne.
5.8. Écrivez un script qui recopie une chaîne (dans une nouvelle variable), en insérant des
astérisques entre les caractères.
Ainsi par exemple, « gaston » devra devenir « g*a*s*t*o*n »
5.9. Écrivez un script qui recopie une chaîne (dans une nouvelle variable) en l'inversant.
Ainsi par exemple, « zorglub » deviendra « bulgroz ».
5.10. En partant de l'exercice précédent, écrivez un script qui détermine si une chaîne de
caractères donnée est un palindrome (c'est-à-dire une chaîne qui peut se lire indifféremment
dans les deux sens), comme par exemple « radar » ou « s.o.s ».
Gérard
5.3. Les listes (première approche)▲
Les chaînes que nous avons abordées à la rubrique précédente constituaient un premier exemple
de données composites, lesquelles sont utilisées pour regrouper de manière structurée des
ensembles de valeurs. Vous apprendrez progressivement à utiliser plusieurs autres types de données
composites, parmi lesquelles les listes, les tuples et les dictionnaires.17 Nous n'allons cependant
aborder ici que le premier de ces trois types, et ce de façon assez sommaire. Il s'agit là en effet d'un
sujet fort vaste, sur lequel nous devrons revenir à plusieurs reprises.
Sous Python, on peut définir une liste comme une collection d'éléments séparés par des
virgules, l'ensemble étant enfermé dans des crochets. Exemple :
>
>
>
jour =
['
lundi
'
, '
mardi
'
, '
mercredi
'
, 1800
, 20
.357
, '
jeudi
'
, '
vendredi
'
]
>
>
>
print
jour
['
lundi
'
, '
mardi
'
, '
mercredi
'
, 1800
, 20
.357
, '
jeudi
'
, '
vendredi
'
]
Dans cet exemple, la valeur de la variable jour est une liste.
Comme on peut le constater dans l'exemple choisi, les éléments qui constituent une liste peuvent
être de types variés. Dans cet exemple, en effet, les trois premiers éléments sont des chaînes de
caractères, le quatrième élément est un entier, le cinquième un réel, etc. (Nous verrons plus loin
qu'un élément d'une liste peut lui-même être une liste !). A cet égard, le concept de liste est donc
assez différent du concept de « tableau » (array) ou de « variable indicée » que l'on rencontre dans
d'autres langages de programmation.
Remarquons aussi que comme les chaînes de caractères, les listes sont des séquences, c'est-à-dire
des collections ordonnées d'objets. Les divers éléments qui constituent une liste sont en effet
toujours disposés dans le même ordre, et l'on peut donc accéder à chacun d'entre eux
individuellement si l'on connaît son index dans la liste. Comme c'était déjà le cas pour les
caractères dans une chaîne, il faut cependant retenir que la numérotation de ces index commence à
partir de zéro, et non à partir de un.
Exemples :
>
>
>
jour =
['
lundi
'
, '
mardi
'
, '
mercredi
'
, 1800
, 20
.357
, '
jeudi
'
, '
vendredi
'
]
>
>
>
print
jour[2
]
mercredi
>
>
>
print
jour[4
]
20
.357
A la différence de ce qui se passe pour les chaînes, qui constituent un type de données nonmodifiables (nous aurons plus loin diverses occasions de revenir là-dessus), il est possible de changer les éléments individuels d'une liste :
>
>
>
print
jour
['
lundi
'
, '
mardi
'
, '
mercredi
'
, 1800
, 20
.357
, '
jeudi
'
, '
vendredi
'
]
>
>
>
jour[3
] =
jour[3
] +
47
>
>
>
print
jour
['
lundi
'
, '
mardi
'
, '
mercredi
'
, 1847
, 20
.357
, '
jeudi
'
, '
vendredi
'
]
On peut donc remplacer certains éléments d'une liste par d'autres, comme ci-dessous :
>
>
>
jour[3
] =
'
Juillet
'
>
>
>
print
jour
['
lundi
'
, '
mardi
'
, '
mercredi
'
, '
Juillet
'
, 20
.357
, '
jeudi
'
, '
vendredi
'
]
La fonction intégrée len() , que nous avons déjà rencontrée à propos des chaînes, s'applique aussi aux listes. Elle renvoie le nombre d'éléments présents dans la liste :
>
>
>
len
(jour)
7
Une autre fonction intégrée permet de supprimer d'une liste un élément quelconque (à partir de son index). Il s'agit de la fonction del()18 :
>
>
>
del
(jour[4
])
>
>
>
print
jour
['
lundi
'
, '
mardi
'
, '
mercredi
'
, '
juillet
'
, '
jeudi
'
, '
vendredi
'
]
Il est également tout à fait possible d'ajouter un élément à une liste, mais pour ce faire, il faut considérer que la liste est un objet, dont on va utiliser l'une des méthodes. Les concepts informatiques d'objet et de méthode ne seront expliqués qu'un peu plus loin dans ces notes, mais nous pouvons dès à présent montrer « comment ça marche » dans le cas particulier d'une liste :
>
>
>
jour.append
('
samedi
'
)
>
>
>
print
jour
['
lundi
'
, '
mardi
'
, '
mercredi
'
, '
juillet
'
, '
jeudi
'
, '
vendredi
'
, '
samedi
'
]
>
>
>
Dans la première ligne de l'exemple ci-dessus, nous avons appliqué la méthode append() à
l'objet jour , avec l'argument 'samedi'. Si l'on se rappelle que le mot append signifie « ajouter »
en anglais, on peut comprendre que la méthode append() est une sorte de fonction qui est en
quelque manière attachée ou intégrée aux objets du type « liste ». L'argument que l'on utilise avec
cette fonction est bien entendu l'élément que l'on veut ajouter à la fin de la liste.
Nous verrons plus loin qu'il existe ainsi toute une série de ces méthodes (c'est-à-dire des
fonctions intégrées, ou plutôt « encapsulées » dans les objets de type « liste »). Notons simplement
au passage que l'on applique une méthode à un objet en reliant les deux à l'aide d'un point.
(D'abord le nom de la variable qui référence l'objet, puis le point, puis le nom de la méthode, cette
dernière toujours accompagnée d'une paire de parenthèses).
Comme les chaînes de caractères, les listes seront approfondies plus loin dans ces notes (voir
page 132). Nous en savons cependant assez pour commencer à les utiliser dans nos programmes.
Veuillez par exemple analyser le petit script ci-dessous et commenter son fonctionnement :
jour =
['
dimanche
'
,'
lundi
'
,'
mardi
'
,'
mercredi
'
,'
jeudi
'
,'
vendredi
'
,'
samedi
'
]
a, b =
0
, 0
while
a<
25
:
a =
a +
1
b =
a %
7
print
a, jour[b]
La 5e ligne de cet exemple fait usage de l'opérateur « modulo » déjà rencontré précédemment et
qui peut rendre de grands services en programmation. On le représente par % dans de nombreux
langages (dont Python). Quelle est l'opération effectuée par cet opérateur ?
Exercices :
5.11. Soient les listes suivantes :
t1 =
[31
, 28
, 31
, 30
, 31
, 30
, 31
, 31
, 30
, 31
, 30
, 31
]
t2 =
['
Janvier
'
, '
Février
'
, '
Mars
'
, '
Avril
'
, '
Mai
'
, '
Juin
'
,
'
Juillet
'
, '
Août
'
, '
Septembre
'
, '
Octobre
'
, '
Novembre
'
, '
Décembre
'
]
Écrivez un petit programme qui crée une nouvelle liste t3. Celle-ci devra contenir tous les
éléments des deux listes en les alternant, de telle manière que chaque nom de mois soit
suivi du nombre de jours correspondant : ['Janvier',31,'Février',28,'Mars',31,
etc...].
5.12. Écrivez un programme qui affiche « proprement » tous les éléments d'une liste. Si on
l'appliquait par exemple à la liste t2 de l'exercice ci-dessus, on devrait obtenir :
Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre
5.13. Écrivez un programme qui recherche le plus grand élément présent dans une liste donnée. Par exemple, si on l'appliquait à la liste [32, 5, 12, 8, 3, 75, 2, 15], ce programme devrait afficher :
le plus grand élément de cette liste a la valeur 75
.
5.14. Écrivez un programme qui analyse un par un tous les éléments d'une liste de nombres (par
exemple celle de l'exercice précédent) pour générer deux nouvelles listes. L'une contiendra
seulement les nombres pairs de la liste initiale, et l'autre les nombres impairs. Par exemple,
si la liste initiale est celle de l'exercice précédent, le programme devra construire une liste
pairs qui contiendra [32, 12, 8, 2], et une liste impairs qui contiendra [5, 3, 75,
15]. Astuce : pensez à utiliser l'opérateur modulo (%) déjà cité précédemment.
5.15. Écrivez un programme qui analyse un par un tous les éléments d'une liste de mots (par
exemple : ['Jean', 'Maximilien', 'Brigitte', 'Sonia', 'Jean-Pierre', 'Sandra'] pour générer deux
nouvelles listes. L'une contiendra les mots comportant moins de 6 caractères, l'autre les
mots comportant 6 caractères ou davantage.
17 Vous pourrez même créer vos propres types de données composites, lorsque vous aurez assimilé le concept de
classe (voir page 152).
18 Il existe en fait tout un ensemble de techniques qui permettent de découper une liste en tranches, d'y insérer des
groupes d'éléments, d'en enlever d'autres, etc., en utilisant une syntaxe particulière où n'interviennent que les index.
Cet ensemble de techniques (qui peuvent aussi s'appliquer aux chaînes de caractères) porte le nom générique de
slicing (tranchage). On le met en oeuvre en plaçant plusieurs indices au lieu d'un seul entre les crochets que l'on
accole au nom de la variable. Ainsi jour[1:3] désigne le sous-ensemble ['mardi', 'mercredi'].
Ces techniques un peu particulières sont décrites plus loin (voir pages 121 et suivantes).