Feat: fichiers squelettes pour pile et file et début de la description

This commit is contained in:
Bertrand Benjamin 2021-06-09 09:05:40 +02:00
parent e597f300a3
commit 6b603bfbac
3 changed files with 390 additions and 0 deletions

176
file.py Normal file
View 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
View 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
View 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