Feat: fichiers squelettes pour pile et file et début de la description
This commit is contained in:
parent
e597f300a3
commit
6b603bfbac
176
file.py
Normal file
176
file.py
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
class Node:
|
||||||
|
"""La classe ```Node``` sera un noeud (une case, un emplacement, ...) où l'on stockera notre donnée
|
||||||
|
|
||||||
|
Les objets de cette classe ont deux attributs:
|
||||||
|
|
||||||
|
value: qui correspond à la valeur stockée
|
||||||
|
nxt: la référence vers le prochain élément
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, value=None, nxt=None) -> None:
|
||||||
|
"""Initialisation du "node"
|
||||||
|
|
||||||
|
:param value: valeur à stocker dans ce "node"
|
||||||
|
:param nxt: Node du prochain élément
|
||||||
|
|
||||||
|
:consignes: compléter l'initialisation de la classe.
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> n1 = Node(1)
|
||||||
|
>>> assert n1.value == 1
|
||||||
|
>>> assert n1.nxt is None
|
||||||
|
>>> n2 = Node(5, n1)
|
||||||
|
>>> assert n1.value == 5
|
||||||
|
>>> assert n1.nxt == n1
|
||||||
|
>>> n3 = Node("a", n2)
|
||||||
|
>>> assert n1.value == "a"
|
||||||
|
>>> assert n1.nxt == n3
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class File:
|
||||||
|
"""
|
||||||
|
La classe ```File``` doit posséder un élément "courant" qui est l'élément sur le dessus de la file.
|
||||||
|
|
||||||
|
Fonctionnement d'une pile
|
||||||
|
|
||||||
|
-----------
|
||||||
|
append ----> _ _ _ _ _
|
||||||
|
-----------
|
||||||
|
|
||||||
|
-----------
|
||||||
|
_ _ _ _ _ ----> pop
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Elle doit aussi posséder un entier ```n``` qui compte le nombre d'éléments dans la file
|
||||||
|
|
||||||
|
Cette classe aura donc 2 attributs:
|
||||||
|
- current avec l'élément courant
|
||||||
|
- n avec le nombre d'éléments dans la file
|
||||||
|
|
||||||
|
:consignes: Compléter les méthodes suivantes.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
"""Initialisation de la File vide
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> file = File()
|
||||||
|
>>> assert file.n == 0
|
||||||
|
>>> assert file.current is None
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def append(self, value):
|
||||||
|
"""Ajoute "value" dans la file
|
||||||
|
|
||||||
|
Comme nous sommes dans une pile, l'élément doit être ajouté en dernière position.
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> file = File()
|
||||||
|
>>> file.append(1)
|
||||||
|
>>> assert file.n == 1
|
||||||
|
>>> assert file.current == 1
|
||||||
|
>>> file.append("a")
|
||||||
|
>>> assert file.n == 2
|
||||||
|
>>> assert file.current == 1
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_current(self):
|
||||||
|
"""Renvoie la prochaine valeur sans l'enlever de la file
|
||||||
|
Si la liste est vide, la fonction renvoie None.
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> file = File()
|
||||||
|
>>> file.get_current()
|
||||||
|
None
|
||||||
|
>>> file.append(3)
|
||||||
|
>>> file.get_current()
|
||||||
|
3
|
||||||
|
>>> file.get_current()
|
||||||
|
3
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def is_empty(self):
|
||||||
|
"""Vérifie si le file est vide
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> file = File()
|
||||||
|
>>> file.is_empty()
|
||||||
|
True
|
||||||
|
>>> file.append(1)
|
||||||
|
>>> file.is_empty()
|
||||||
|
False
|
||||||
|
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def pop(self):
|
||||||
|
"""Renvoie le prochain élément de la file et l'enlève
|
||||||
|
|
||||||
|
Comme c'est une file, le prochain élément est le premier élément arrivé.
|
||||||
|
|
||||||
|
Si la liste est vide, la fonction renvoie None.
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> file = File()
|
||||||
|
>>> file.pop()
|
||||||
|
None
|
||||||
|
>>> file.append(2)
|
||||||
|
>>> file.pop()
|
||||||
|
2
|
||||||
|
>>> file.pop()
|
||||||
|
None
|
||||||
|
>>> pile.append(2)
|
||||||
|
>>> pile.append(5)
|
||||||
|
>>> pile.append("a")
|
||||||
|
>>> file.pop()
|
||||||
|
2
|
||||||
|
>>> file.pop()
|
||||||
|
5
|
||||||
|
>>> file.pop()
|
||||||
|
'a'
|
||||||
|
>>>
|
||||||
|
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def empty(self):
|
||||||
|
"""vide la file c'est à dire element tous les elements de cette dernière
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> file = File()
|
||||||
|
>>> file.append(3)
|
||||||
|
>>> file.append(5)
|
||||||
|
>>> file.append("a")
|
||||||
|
>>> file.get_current()
|
||||||
|
"a"
|
||||||
|
>>> assert file.n == 3
|
||||||
|
>>> file.empty()
|
||||||
|
>>> file.get_current()
|
||||||
|
None
|
||||||
|
>>> assert file.n == 0
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
175
pile.py
Normal file
175
pile.py
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
class Node:
|
||||||
|
"""La classe ```Node``` sera un noeud (une case, un emplacement, ...) où l'on stockera notre donnée
|
||||||
|
|
||||||
|
Les objets de cette classe ont deux attributs:
|
||||||
|
|
||||||
|
value: qui correspond à la valeur stockée
|
||||||
|
nxt: la référence vers le prochain élément
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, value=None, nxt=None) -> None:
|
||||||
|
"""Initialisation du "node"
|
||||||
|
|
||||||
|
:param value: valeur à stocker dans ce "node"
|
||||||
|
:param nxt: Node du prochain élément
|
||||||
|
|
||||||
|
:consignes: compléter l'initialisation de la classe.
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> n1 = Node(1)
|
||||||
|
>>> assert n1.value == 1
|
||||||
|
>>> assert n1.nxt is None
|
||||||
|
>>> n2 = Node(5, n1)
|
||||||
|
>>> assert n1.value == 5
|
||||||
|
>>> assert n1.nxt == n1
|
||||||
|
>>> n3 = Node("a", n2)
|
||||||
|
>>> assert n1.value == "a"
|
||||||
|
>>> assert n1.nxt == n3
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Pile:
|
||||||
|
"""
|
||||||
|
La classe ```Pile``` doit posséder un élément "courant" qui est l'élément sur le dessus de la pile.
|
||||||
|
|
||||||
|
Fonctionnement d'une pile
|
||||||
|
|
||||||
|
-----------
|
||||||
|
_ _ _ _ _ <---- append
|
||||||
|
-----------
|
||||||
|
|
||||||
|
-----------
|
||||||
|
_ _ _ _ _ ----> pop
|
||||||
|
-----------
|
||||||
|
|
||||||
|
|
||||||
|
Elle doit aussi posséder un entier ```n``` qui compte le nombre d'éléments dans la pile
|
||||||
|
|
||||||
|
Cette classe aura donc 2 attributs:
|
||||||
|
- current avec l'élément courant
|
||||||
|
- n avec le nombre d'éléments dans la pile
|
||||||
|
|
||||||
|
:consignes: Compléter les méthodes suivantes.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
"""Initialisation de la Pile vide
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> pile = Pile()
|
||||||
|
>>> assert pile.n == 0
|
||||||
|
>>> assert pile.current is None
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def append(self, value):
|
||||||
|
"""Ajoute "value" dans la pile
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> pile = Pile()
|
||||||
|
>>> pile.append(1)
|
||||||
|
>>> assert pile.n == 1
|
||||||
|
>>> assert pile.current == 1
|
||||||
|
>>> pile.append("a")
|
||||||
|
>>> assert pile.n == 2
|
||||||
|
>>> assert pile.current == "a"
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_current(self):
|
||||||
|
"""Renvoie la prochaine valeur sans l'enlever de la pile
|
||||||
|
Si la liste est vide, la fonction renvoie None.
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> pile = Pile()
|
||||||
|
>>> pile.get_current()
|
||||||
|
None
|
||||||
|
>>> pile.append(3)
|
||||||
|
>>> pile.get_current()
|
||||||
|
3
|
||||||
|
>>> pile.get_current()
|
||||||
|
3
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def is_empty(self):
|
||||||
|
"""Vérifie si le pile est vide
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> pile = Pile()
|
||||||
|
>>> pile.is_empty()
|
||||||
|
True
|
||||||
|
>>> pile.append(1)
|
||||||
|
>>> pile.is_empty()
|
||||||
|
False
|
||||||
|
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def pop(self):
|
||||||
|
"""Renvoie le prochain élément de la pile et l'enlève.
|
||||||
|
|
||||||
|
Comme c'est une pile, le prochain élément est le dernier élément arrivé.
|
||||||
|
|
||||||
|
Si la liste est vide, la fonction renvoie None.
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> pile = Pile()
|
||||||
|
>>> pile.pop()
|
||||||
|
None
|
||||||
|
>>> pile.append(2)
|
||||||
|
>>> pile.pop()
|
||||||
|
2
|
||||||
|
>>> pile.pop()
|
||||||
|
None
|
||||||
|
>>> pile.append(2)
|
||||||
|
>>> pile.append(5)
|
||||||
|
>>> pile.append("a")
|
||||||
|
>>> pile.pop()
|
||||||
|
'a'
|
||||||
|
>>> pile.pop()
|
||||||
|
5
|
||||||
|
>>> pile.pop()
|
||||||
|
2
|
||||||
|
>>>
|
||||||
|
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
||||||
|
|
||||||
|
def empty(self):
|
||||||
|
"""vide la pile c'est à dire element tous les elements de cette dernière
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> pile = Pile()
|
||||||
|
>>> pile.append(3)
|
||||||
|
>>> pile.append(5)
|
||||||
|
>>> pile.append("a")
|
||||||
|
>>> pile.get_current()
|
||||||
|
"a"
|
||||||
|
>>> assert pile.n == 3
|
||||||
|
>>> pile.empty()
|
||||||
|
>>> pile.get_current()
|
||||||
|
None
|
||||||
|
>>> assert pile.n == 0
|
||||||
|
"""
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# -----------------------
|
||||||
|
pass
|
39
pile_file.md
Normal file
39
pile_file.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
title : TP - Structure de données linéaire - Pile et File
|
||||||
|
author : TOTARA Cédric et BERTRAND Benjamin
|
||||||
|
date : 06 juin 2021
|
||||||
|
---
|
||||||
|
|
||||||
|
# Résumé du projet
|
||||||
|
|
||||||
|
Cette activité a pour objectif de vous faire travailler avec les structures de données de type **pile** et **file**. Les élèves sont par groupe de deux et réaliseront le projet en **pair programming**.
|
||||||
|
|
||||||
|
Elle se déroule en 2 temps :
|
||||||
|
|
||||||
|
- Élaboration des classes ```Pile``` et ```File``` sous forme d'un module à importer
|
||||||
|
- Choix et réalisation d'un projet choisi dans une banque avec la contrainte d'utiliser une pile ou une file.
|
||||||
|
|
||||||
|
La banque est constitué de sujets de difficultés variés.
|
||||||
|
|
||||||
|
Ce TP se déroulera sur 3 semaines à raison de 1h par semaine et devra être complété par un travail personnel de la part des élèves si le besoin s'en fait sentir.
|
||||||
|
|
||||||
|
# Étapes
|
||||||
|
|
||||||
|
## Étape 1: Compléter le module implémentant une pile et une file
|
||||||
|
|
||||||
|
## Étape 2: Projet
|
||||||
|
|
||||||
|
# Déroulement de la séquence
|
||||||
|
|
||||||
|
L'enseignant commence à présenter les concepts de **pile** et de **file**.
|
||||||
|
|
||||||
|
Support à prévoir
|
||||||
|
|
||||||
|
Les élèves ont ensuite 15minutes sans avoir le droit de toucher un clavier pour choisir une projet et reflechir sur papier ou à l'oral à la façon de compléter le code pour les classes Pile et File.
|
||||||
|
|
||||||
|
A la suite de ce temps de prise en main, les élèves réalise les deux étapes en paire-programming. Toutes les 10minutes, ils échangent celui qui a le clavier. Celui qui a le clavier peut coder tandis que l'autre commente, accompagne ou refléchit à la suite.
|
||||||
|
|
||||||
|
# Evaluation
|
||||||
|
|
||||||
|
# Pré-requis
|
||||||
|
|
Loading…
Reference in New Issue
Block a user