Vous êtes sur la page 1sur 3

Terminale- NSI activité : Tableau de taille fixée

Dans un programme tab_limite.py on veut définir une classe Tableau_taille_fixee pour représenter
un tableau de taille fixée contenant des nombres entiers ou None.
Le constructeur __init__ de cette classe possède un paramètre : taille, taille est un integer
strictemment positif, il vaut 1 par défaut si un utilisateur ne donne pas de valeur pour taille lors de
l’instanciation.
Puis lors d’une instanciation : Chaque instance de classe Tableau aura trois attributs :
- Un attribut qui est une liste Python tab de taille éléments valant tous None.
- Un attribut taille_fixee qui est un integer valant taille ( et donc aussi len(self.tab) )
- Un attribut index_max qui est un integer valant -1.

class Tableau_taille_fixee:

Voici ci-dessous des éléments de compréhension de ce que l’on veut :


>>> a = Tableau_taille_fixee(5)
>>> print(a.tab) >>> print(index_max) >>> print(a.taille_fixee)
[None, None, None, None, None] -1 5
Si nous insérons dans le tableau des valeurs : 8 en position 1, 3 en position 2, 5 en position 3.
Nous aurons :
>>> print(a.tab) >>> print(index_max) >>> print(a.taille_fixee)
[8, 3, 5, None, None] 2 5
Il existe plusieurs façons de concevoir ce tableau, le plus simple consiste à utiliser les listes Python. On
peut par exemple réaliser un tableau capable de contenir n éléments avec une liste python de
longueur n.

question 1 : compléter le constructeur de cette classe qui vous est donné, sachant que :
- Le constructeur doit lever une AssertionError si le paramètre fourni pour taille n’est pas de classe int
ou n’est pas strictement positif.
def __init__(self, taille=1):

self.tab = [None] * taille # self.tab est de type list Python
self.taille_fixee = taille
self.index_max = - 1 # le plus haut index du tableau qui a été rempli

question 2 :
Ajouter une méthode __str__ qui affiche en console une instance de classe Tableau_taille_fixee
Exemple :
>>> print(Tableau_taille_fixee(5))
[ [None, None, None, None, None] ]
>>> a = Tableau_taille_fixee(5)
Et si nous insérons dans le tableau des valeurs : 8 en position 1, 3 en position 2, 5 en position 3.
Nous aurons :
>>> print(a)
[ [8, 3, 5, None, None] ]

1
Terminale- NSI activité : Tableau de taille fixée

question 3 :
Ajouter une méthode __repr__ qui affiche en console une instance de classe Tableau_taille_fixee
Exemple :
>>> a
[ [8, 3, 5, None, None] ]
question 4 : Nous voulons compléter le code une méthode append telle que l’on puisse ajouter des
valeurs à l’attribut tab d’une instance :
def append(self, val):
assert self.index_max + 1 < … , "le tableau est déjà rempli"
self.tab[…] = …
self.index_max = …
ainsi :
>>> b = Tableau_taille_fixee(5)
>>> b.append(4)
>>> b
[ [4, None, None, None, None] ]
>>> b.index_max
0
>>> b.append(6)
>>> b
[ [4, 6, None, None, None] ]
>>> b.index_max
1
>>> b.append(7)
>>> b.append(9)
>>> b.append(2)
>>> b
[ [4, 6, 7, 9, 2] ]
>>> b.index_max
5
>>> b.append(10)
AssertionError , "le tableau est déjà rempli"

question 5 : : Nous voulons compléter le code d’une méthode __len__ telle que l’on puisse retourner
le nombre de valeurs que contient l’attribut tab d’une instance de classe Tableau_taille_fixee :
def __len__(self) :

>>> a = Tableau_taille_fixee(5)
>>> len(a)
0
>>> a.append(8)
>>> len(a)
1
>>> a.append(3)
>>> print(a)
[ [8, 3, 5, None, None] ]
>>> len(a)
3
2
Terminale- NSI activité : Tableau de taille fixée

question 6 : Rappel a est notre instance précédente:


>>> print(a)
[ [8, 3, 5, None, None] ]
Ajouter une méthode __getitem__ telle que pour notre instance a les résultats suivants seront vérifiés:
>>> a[0]
8
>>> a[2]
5
>>> a[-1]

AssertionError: l'index doit être un entier positif
>>> a[4]

AssertionError: cette case est vide
>>> a.append(4)
>>> a.append(7)
>>> a
[[2, 1, 8, 4, 7]]
>>> len(a)
5
>>> a[4]
7
>>> a[3]
4
>>> a[5]

AssertionError: index out of range : trop loin !

question 7 : Ajouter une méthode __setitem__ telle que pour une instance a on puisse modifier
uiquement les valeurs déjà rentrées, par exemple :
>>> a
[[2, 1, 8, None, None]]

>>> a[1] = 5
>>> a
[[2, 5, 8, None, None]]
>>> a[4] = 1

AssertionError: cette case est vide
question 8 : Nous voulons ajouter trois méthodes
inserer telle que : avec inserer(self, index, val) l’élément val sera inséré dans l’attribut tab à la
position index sans écraser de valeurs déjà présentes dans le tableau.
supprimer telle que : avec supprimer(self, i) l’élément situé à la position i dans l’attribut tab sera
supprimé et s’il y a des éléments placés après, ils seront décalés pour ne pas laisser de "trou".
rechercher telle que : avec rechercher(self, elem) l’élément elem est cherché dans l’attribut tab et on
retourne son index de première présence s’il est présent et None dans le cas où il n’est pas présent.

Vous aimerez peut-être aussi