Informatique et Sciences du Numérique 2012
Tableaux et listes :
Les crochets [ ] encadrant une suite d'éléments permettent de reconnaître un tableau ou une liste.
exemple : tablo=[2,5,6,1,8] est un tableau d'entiers
liste=['a','c','z','lettre',25,....] est une liste contenant des caractères 'b', une chaîne de
caractère, un entier 25 et ...
Les deux sont très proches en Python. On utilisera le mot tableau pour des éléments de type
identique dont le nombre est invariable (dans l'exemple : 5) et liste lorsque les éléments ne sont pas
forcément de type identique et dont la taille peut varier (d'où les ... )
Les crochets ont déjà été utilisés avec un certain type de variable. Lequel?
Accès à un élément d'un tableau :
Les éléments d'un tableau portent un numéro ou indice . La numérotation commence à zéro
0. Le premier élément a le numéro zéro, puis un etc...
La valeur 1 du tablo ci-dessus a pour indice 3.
Pourquoi n'y a-t-il pas d'élément d'indice 5 dans tablo?
b=tablo[1] permet d'affecter à b la valeur 5.
Que fait print(tablo[4])?
Utiliser Python en ligne de commande pour déclarer le tablo et tester print(tablo[3]), puis
print(tablo[0]) et print(tablo[5]).
Si un message d'erreur s'affiche le traduire en français.
Accès à une tranche de tableau :
La syntaxe est voisine. ex tablo[1:4] affiche [5, 6, 1].
Que doit on rentrer pour afficher [2,5,6]?
Taille ou longueur du tableau :
Comme pour les chaînes de caractères, on utilise la fonction len(nom_de_variable).
Par exemple :
>>>print(len(tablo))
5
C'est très utile pour ne pas sortir du tableau lorsqu'on veut accéder à un élément..
Pourquoi >>> print(tablo[len(tablo)]) est mauvais?
Pourquoi >>> print(tablo[len(tablo)-1]) est bon? Que fait cette instruction?
Taper le programme Python ci-dessous et sauvegarder.
#affiche ??
tablo=['b','d','v','a','r','o','e']
print(tablo[0],tablo[4],tablo[3],tablo[2],tablo[len(tablo)-1])
Que fait ce programme?
Comment le modifier pour qu'il affiche radar?
Informatique et Sciences du Numérique 2012
Parcours d'un tableau :
Soit le tableau :
tablo=[6,8,7,1,9,78,1,0,0,0,85,3,-1,6,12,21,5,4,-1,0,15,6,7,-1,-2,3,24,100,5,3,2,49,19,54,7,8,3]
qui se trouve dans le fichier texte : exemples_tablo.txt et que l'on importera dans l'Editeur de Python
par un copier-coller pour ne pas le retaper chaque fois.
Utilisation d'une instruction pour (for) :
Taper le programme Python ci-dessous et sauvegarder sous le nom parcours.py.
#parcours de tableau
tablo=[6,8,7,1,9,78,1,0,0,0,85,3,-1,6,12,21,5,4,-1,0,15,6,7,-1,-2,3,24,100,5,3,2,49,19,54,7,8,3]
for i in range(len(tablo)): # prend les valeurs 0,1,2....jusqu'à la dernière valeur de l'indice du tablo
print(tablo[i],end=' ') # i est l'indice qui permet de parcourir le tableau
Ce programme affiche les valeurs du tableau séparées par des espaces.
Comment modifier ce programme pour qu'il affiche seulement les 10 premières
valeurs?
Comment modifier ce programme pour qu'il affiche seulement les valeurs
négatives du tablo?
Changer une valeur du tableau :
Modifier le programme Python ci-dessus ainsi.
# changer la troisième valeur 7 en 1000
tablo=[6,8,7,1,9,78,1,0,0,0,85,3,-1,6,12,21,5,4,-1,0,15,6,7,-1,-2,3,24,100,5,3,2,49,19,54,7,8,3]
tablo[2]=1000
for i in range(len(tablo)):
print(tablo[i],end=' ')
affiche : 6 8 1000 7 1 9 .... la troisième valeur a été changée.
Comment modifier ce programme pour que l'avant dernière valeur (8) soit
changée en -1000?
Echange du contenu de deux variables :
On utilise une variable auxiliaire de la façon suivante :
a=1
b=5
auxiliaire=a # on stocke dans auxiliaire la valeur de a soit 1
a=b # on donne à a la valeur contenue dans b soit :
b=auxiliaire # on donne à b la valeur contenue dans a à la première ligne
alors a==5 et b==1 les contenus sont échangés (auxiliaire ne sert plus à rien).
Où est l'erreur :
auxiliaire=b
a=b
b=auxiliaire
et ici :
a=b
b=a
Informatique et Sciences du Numérique 2012
Appliquons cet algorithme à un tableau.
Ecrire le programme Python echange.py qui à partir de :
tablo=[6,8,7,1,9,78,1,0,0,0,85,3,-1,6,12,21,5,4,-1,0,15,6,7,-1,-2,3,24,100,5,3,2,49,19,54,7,8,3]
donne :
tablo=[3,8,7,1,9,78,1,0,0,0,85,3,-1,6,12,21,5,4,-1,0,15,6,7,-1,-2,3,24,100,5,3,2,49,19,54,7,8,6]
c'est à dire qui échange la première et la dernière valeur du tableau.
Ecrire le programme Python somme.py qui fasse la somme de toutes les valeurs du tablo
et affiche le résultat. La somme est 546.
Algorithme :
On définit une variable somme initialisée à 0.
A chaque boucle, on ajoute à somme la valeur du tableau et on affecte à somme le
résultat :
somme = 0
1° valeur
0+6=
somme=6
2° valeur
somme+8=6+8=15
somme=15
3° valeur
somme+7=15+7=22
somme=22
...
somme=546
Opérations
Affectations
Ecrire le programme Python dedans.py qui dise si une valeur entrée par l'utilisateur
( x=int(input('x? :')) )est dans le tablo (vrai) ou non (faux)?
On comprend qu'il faudra utiliser un booléen.
Recherche dichotomique :
dichotomique = "partage en deux".
Le programme dedans.py ci dessus effectue un nombre de comparaison égal à la taille du
tableau. Cela peut faire beaucoup.
Peut on trouver un élément en moins de comparaison?
Oui si le tablo est rangé ou trié c'est à dire si les éléments sont classés.
Par exemple dans le :
tablo_trie=[2,3,8,9,10,12,15,17,21,25,29,31,56,66,67,69,71,75,81,89,90,93,100,101,148,221,224]
(contenu dans exemples_tablo.txt à reproduire par copier-coller) où les nombres sont classés dans
l'ordre croissant.
Le recherche dichotomique consiste à diviser le tableau en deux. Si l'élément recherché n'est
pas dans une moitié, il est dans l'autre. Il suffit de comparer l'élément recherché avec le dernier
élément de la première moitié :
si élément_cherché=<dernier element de la première moitié: (comparaison)
l'élément est dans la première moitié
sinon:
l'élément est dans la deuxième moitié
On recommence jusqu'à ce que l'élément soit trouvé ou qu'il ne soit plus possible de faire une
moitié de ce qui reste du tableau (alors l'élément n'est pas trouvé).
On fait une comparaison à chaque fractionnement du tableau en 2 soit si le tableau à 25
éléments : 25 12 6 3 1 environ 4 fractionnements donc 4 comparaisons contre 25 si on
compare avec les éléments un à un.
Informatique et Sciences du Numérique 2012
Quelle est la longueur du tablo_trie?
Quel est l'indice du dernier élément?
Le tableau est coupé en deux. Quel est la taille de la première moitié (la plus
petite)? Quelle est la taille de la deuxième moitié (égale ou plus grande)?
Quel est l'indice du dernier élément de la première moitié?
Quelle est la valeur de cet élément?
Si la valeur recherchée est '17', doit on continuer la recherche dans la deuxième
moitié?
pas à pas :
recherche de la valeur 17 dans tablo_trie :
[2,3,8,9,10,12,15,17,21,25,29,31,56,66,67,69,71,75,81,89,90,93,100,101,148,221,224]
[2,3,8,9,10,12,15,17,21,25,29,31,56]
[66,67,69,71,75,81,89,90,93,100,101,148,221,224]
[2,3,8,9,10,12]
[15,17,21,25,29,31,56]
[15,17,21]
[25,29,31,56]
[15]
[17,21]
[17] Trouvé
[21]
On a procédé à 5 comparaisons et trouvé la valeur 17.
Arithmétique : Pour couper le tableau en deux, on utilise la division euclidienne //2
qui retourne le quotient (entier) de la division par deux mais pas le reste (1).
Taper en ligne de commande :
>>> print(27//2)
>>> print(13//2)
>>> print(6//2)
>>> print(3//2)
Informatique et Sciences du Numérique 2012
Découpage d'un tableau en partie basse et haute par la valeur ultime_partie_basse (servant de frontière).
Soit un tableau limité par borne supérieure et borne inférieure
ultime_partie_basse=(borne_superieure+borne_inferieure-1)//2
permet de trouver l'indice qui coupe le tableau en deux. La partie haute est de taille supérieure ou
égale à la partie basse. A chaque étape, on ne garde qu'une moitié haute ou basse du tableau.
Appliquer cet algorithme au tableau ci-dessus et colorier la partie conservée en encadrant la
case ultime_partie_basse.
1° fois : on garde la partie basse
2° fois : on garde la partie basse (ligne du dessous)
3° fois : la partie haute
4° fois : la partie basse
5° fois : la partie haute
6° fois : la partie basse
.Peut il y avoir une septième fois?
Le document Annexe.doc contient le codage Python de la recherche dichotomique exposée
ci dessus. Il n'est pas nécessaire de taper ce programme.
.Combien de répétitions d'instructions identiques trouve-t-on dans ce document?
.Quelle instruction répétitive conditionnelle va-t-on utiliser pour effectuer ces
répétitions?
.Quelle condition non vérifiée mettra fin à ces répétitions?
. Quelles instructions n'appartiennent pas à la répétition?
Ecrire le programme Python dichotomie.py utilisant cette répétitive conditionnelle qui dise
si une valeur (recherche) se trouve dans le tableau ou pas.
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !