Pour ranger ses affaires, on choisit le bon contenant : une pile d'assiettes, une file d'attente, un agenda.
En informatique, c'est pareil : selon ce que l'on veut faire des données, une organisation sera bien plus commode qu'une autre.
À faire dans le cahier.
class Truc:
def __init__(self):
self.__liste=[]
def ajout(self,objet):
self.__liste.insert(0,objet)
def enleve(self):
return self.__liste.pop()
def nombre_objets(self):
return len(self.__liste)
En considérant la classe Truc ci-dessus :
.__liste ?nouvel_objet=Truc()
nouvel_objet.ajout(3)
nouvel_objet.ajout(2)
nouvel_objet.ajout(10)
print(nouvel_objet.enleve())
print(nouvel_objet.nombre_objets())
Qu'affiche le code suivant ?
Schématisez sur votre cahier la façon dont se comporte un objet de classe Truc.
Comment appelle-t-on cela dans la vie courante ?
En informatique, que cela soit pour les ordinateurs personnels, les smartphones, les serveurs ou tout autre matériel numérique, nos programmes manipulent un ordre considérable de données
Les programmes actuels structurent leurs données dans les algorithmes.
Il y a plusieurs façons de structurer les données au niveau logiciel.
Un tableau est une structure de données linéaire indexée.
Il faut faire attention au contexte pour savoir si c'est une structure statique ou dynamique.
On souhaite créer une classe TableauStatique qui permet de créer un objet de type statique, indexé et linéaire.
Le tableau doit avoir les caractéristiques suivantes :
__init__(self, taille).None (attribut privé).__tab est une liste qui contiendra les données du tableau.__taille est privé et correspond à la taille du tableautaille_tableau(self) retourne la taille du tableau.est_vide(self) renvoie True si le tableau est composé uniquement de None, False sinon.change(self, i, data) change l’élément d’indice i en data.effacer(self, i) remplace l’élément d’indice i par None.connaitre(self, i) renvoie le contenu de l’élément à l’indice i.affiche_tout(self) affiche le contenu complet du tableau.
Une file est une structure de données linéaire, non indexée, qui peut être dynamique et où l'élément que l'on peut sortir est le premier à être rentré (FIFO : First In, First Out).
C'est le principe d'une file d'attente à une caisse : le premier client arrivé est le premier servi. Observe l'animation ci-dessous : les éléments entrent par l'arrière (à gauche) et sortent par l'avant (à droite).
Regarde bien : le premier entré est toujours le premier sorti.
Une pile est une structure de données linéaire, non indexée, qui peut être dynamique et où l'élément que l'on peut sortir est le dernier à être rentré (LIFO : Last In, First Out).
C'est le principe d'une pile d'assiettes : on pose une assiette au sommet, et on reprend toujours celle du sommet. Observe l'animation ci-dessous : les éléments entrent et sortent par le haut.
Ce sont exactement les mêmes valeurs que dans la file plus haut, qui entrent au même moment : compare ce qui sort de chaque structure !
Regarde bien : le dernier entré est toujours le premier sorti.
Par exemple, les piles et les files ne sont pas présentes dans Python.
On peut toutefois créer cet objet avec par exemple la classe Pile ci-dessous :
class Pile:
def __init__(self):
self.__tablo = []
def empiler(self, data):
self.__tablo.append(data)
def depiler(self):
return self.__tablo.pop()
def est_vide(self):
return self.__tablo==[]:
p=Pile()
p.empiler(2)
print(p.depiler())
print(p.est_vide())
Ci-dessous :
caracteres_dans_pile qui prend comme paramètre un string et renvoie une pile contenant les caractères (un par un) de ce string.Créer une fonction nb_espaces qui prend comme paramètre une pile contenant des caractères et renvoie le nombre de fois où le caractère espace apparait sous la forme d'un integer.
La pile peut être détruite dans le processus.
Créer la classe File contenant les méthodes suivantes :
enfiler(self, data) qui insère un objet dans la filedefiler(self) qui extrait le premier élément de la fileest_vide(self) qui teste si la file est videnon_vide(self) qui teste si la file est non vide
En utilisant la classe File :
extraire(un_texte) qui prend un string et met chaque caractère dans une file.Créer une fonction voyelle(une_file) qui prend une file qui contient des caractères et renvoie un integer correspondant au nombre de voyelles présentes dans la file.
La file pourra être détruite dans le processus.
plus_grande(une_file) qui prend une file composée uniquement d’entiers et renvoie le plus grand nombre de la file.
On considère des chaînes composées uniquement de parenthèses ouvrantes '(' et fermantes ')'.
Un parenthésage est correct si :
Cette fonction utilise une pile et suit le principe suivant : en parcourant la chaîne de gauche à droite, si on trouve une parenthèse ouvrante, on l’empile au sommet de la pile et si on trouve une parenthèse fermante, on dépile (si possible) la parenthèse ouvrante stockée au sommet de la pile.
La chaîne est alors bien parenthésée si, à la fin du parcours, la pile est vide.
Elle est, par contre, mal parenthésée :
Compléter la fonction bon_parenthesage(ch) ci-dessous :
>>> bon_parenthesage("((()())(()))")
True
>>> bon_parenthesage("())(()")
False
>>> bon_parenthesage("(())(()")
False
Cet exercice utilise des piles qui seront représentées par des listes Python.
Si pile est une pile, alors pile == [] indique si la pile est vide, pile.pop() retire et renvoie le sommet de la pile et pile.append(v) ajoute la valeur v au sommet de la pile.
Si on considère qu’une fonction manipule une pile, elle ne peut pas utiliser d’autres opérations que celles décrites ci-dessus.
On cherche à écrire une fonction positifs qui prend une pile de nombres entiers en paramètre et qui renvoie une nouvelle pile contenant les entiers positifs de la pile initiale, dans le même ordre, quitte à modifier la pile initiale.
Pour cela, on va également écrire une fonction renverse qui prend une pile en paramètre et qui renvoie une nouvelle pile contenant les mêmes éléments que la pile initiale, mais dans l’ordre inverse. Cette fonction sera également amenée à modifier la pile passée en paramètre.
Compléter le code Python des fonctions renverse et positifs ci-après.
Exemples :
>>> renverse([1, 2, 3, 4, 5])
[5, 4, 3, 2, 1]
>>> positifs([-1, 0, 5, -3, 4, -6, 10, 9, -8])
[0, 5, 4, 10, 9]
>>> positifs([-2])
[]