Skip to content
Snippets Groups Projects
Commit 12e4dcb7 authored by Dahmane Lynda's avatar Dahmane Lynda
Browse files

tp6

parent bd10478b
No related branches found
No related tags found
No related merge requests found
......@@ -34,7 +34,7 @@ class DicoTrie:
$$$ repr(DicoTrie([Association('c', 3), Association('a', 2), Association('b', 1)]))
"DicoTrie([Association('a', 2), Association('b', 1), Association('c', 3)])"
"""
...
return f"DicoTrie({self.liste_assos}"
def __eq__(self, autre) -> bool:
"""
......@@ -48,7 +48,12 @@ class DicoTrie:
$$$ d1 == {"a": 1, "b": 2}
False
"""
...
if len(self.liste_assos)==len(autre.liste_assos)or type (self)==type(autre):
for elt in self.liste_assos:
for elem in autre.liste_assos:
return True
else:
return False
def __setitem__(self, cle: C, valeur: V) -> NoneType:
"""
......@@ -57,7 +62,7 @@ class DicoTrie:
$$$ d1
DicoTrie([Association("a", 1), Association("b", 2), Association("c", 3)])
"""
...
self.liste_assos[cle]=valeur
def __getitem__(self, cle: C) -> V:
"""
......@@ -69,7 +74,7 @@ class DicoTrie:
$$e d1['c']
KeyError
"""
...
return self.liste_assos[cle]
def __delitem__(self, cle: C) -> NoneType:
"""
......@@ -80,8 +85,11 @@ class DicoTrie:
$$e del d1['c']
KeyError
"""
...
if isinstance(cle,str):
self.supprime(cle)
else:
return KeyError
def __contains__(self, cle: C) -> bool:
"""
$$$ d1 = DicoTrie([Association("a", 1), Association("b", 2)])
......@@ -90,7 +98,9 @@ class DicoTrie:
$$$ 'c' in d1
False
"""
...
if isinstance(cle,str):
return self.contains(cle)
return False
if __name__ == '__main__':
import apl1test
......
......@@ -50,35 +50,53 @@ def indice_seq(elem: C, liste: list[C], comp: Callable[[C, C], int]) \
i=index
return trouve,i
#
# def indice_dicho(elem: C, liste: list[C], comp: Callable[[C, C], int]) \
# -> tuple[bool, int]:
# """Renvoie un couple (trouve, i) tel que:
# - si elem est un élément de liste,
# * trouve = True
# * i est l'indice de première occurence de elem dans liste
# - si elem n'est pas un élément de la liste :
# * trouve = False
# * pour tout j < i, liste[j] < liste[i]
# * pour tout j > i, liste[j] > liste[i]
#
# Précondition : comp est une fonction de comparaison et liste est triée pour comp
#
# $$$ def compare(x, y): return 0 if x == y else 1 if x > y else -1
# $$$ indice_dicho(0, [1, 3, 5], compare)
# (False, 0)
# $$$ indice_dicho(3, [1, 3, 5], compare)
# (True, 1)
# $$$ indice_dicho(4, [1, 3, 5], compare)
# (False, 2)
# $$$ indice_dicho(5, [1, 3, 5], compare)
# (True, 2)
# $$$ indice_dicho(6, [1, 3, 5], compare)
# (False, 3)
# $$$ indice_dicho(42, [], compare)
# (False, 0)
# """
#
def indice_dicho(elem: C, liste: list[C], comp: Callable[[C, C], int]) \
-> tuple[bool, int]:
"""Renvoie un couple (trouve, i) tel que:
- si elem est un élément de liste,
* trouve = True
* i est l'indice de première occurence de elem dans liste
- si elem n'est pas un élément de la liste :
* trouve = False
* pour tout j < i, liste[j] < liste[i]
* pour tout j > i, liste[j] > liste[i]
Précondition : comp est une fonction de comparaison et liste est triée pour comp
$$$ def compare(x, y): return 0 if x == y else 1 if x > y else -1
$$$ indice_dicho(0, [1, 3, 5], compare)
(False, 0)
$$$ indice_dicho(3, [1, 3, 5], compare)
(True, 1)
$$$ indice_dicho(4, [1, 3, 5], compare)
(False, 2)
$$$ indice_dicho(5, [1, 3, 5], compare)
(True, 2)
$$$ indice_dicho(6, [1, 3, 5], compare)
(False, 3)
$$$ indice_dicho(42, [], compare)
(False, 0)
"""
debut=0
i=len(liste)
trouvr=False
fin=len(liste)-1
while debut<= fin:
milieu=(debut+fin)//2
if comp (elem,liste[milieu])==0:
trouve=True
i=milieu
elif comp(elem,liste[milieu])<0:
fin=milieu-1
else:
debut=milieu+1
return trouve,i
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment