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: ...@@ -34,7 +34,7 @@ class DicoTrie:
$$$ repr(DicoTrie([Association('c', 3), Association('a', 2), Association('b', 1)])) $$$ repr(DicoTrie([Association('c', 3), Association('a', 2), Association('b', 1)]))
"DicoTrie([Association('a', 2), Association('b', 1), Association('c', 3)])" "DicoTrie([Association('a', 2), Association('b', 1), Association('c', 3)])"
""" """
... return f"DicoTrie({self.liste_assos}"
def __eq__(self, autre) -> bool: def __eq__(self, autre) -> bool:
""" """
...@@ -48,7 +48,12 @@ class DicoTrie: ...@@ -48,7 +48,12 @@ class DicoTrie:
$$$ d1 == {"a": 1, "b": 2} $$$ d1 == {"a": 1, "b": 2}
False 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: def __setitem__(self, cle: C, valeur: V) -> NoneType:
""" """
...@@ -57,7 +62,7 @@ class DicoTrie: ...@@ -57,7 +62,7 @@ class DicoTrie:
$$$ d1 $$$ d1
DicoTrie([Association("a", 1), Association("b", 2), Association("c", 3)]) DicoTrie([Association("a", 1), Association("b", 2), Association("c", 3)])
""" """
... self.liste_assos[cle]=valeur
def __getitem__(self, cle: C) -> V: def __getitem__(self, cle: C) -> V:
""" """
...@@ -69,7 +74,7 @@ class DicoTrie: ...@@ -69,7 +74,7 @@ class DicoTrie:
$$e d1['c'] $$e d1['c']
KeyError KeyError
""" """
... return self.liste_assos[cle]
def __delitem__(self, cle: C) -> NoneType: def __delitem__(self, cle: C) -> NoneType:
""" """
...@@ -80,8 +85,11 @@ class DicoTrie: ...@@ -80,8 +85,11 @@ class DicoTrie:
$$e del d1['c'] $$e del d1['c']
KeyError KeyError
""" """
... if isinstance(cle,str):
self.supprime(cle)
else:
return KeyError
def __contains__(self, cle: C) -> bool: def __contains__(self, cle: C) -> bool:
""" """
$$$ d1 = DicoTrie([Association("a", 1), Association("b", 2)]) $$$ d1 = DicoTrie([Association("a", 1), Association("b", 2)])
...@@ -90,7 +98,9 @@ class DicoTrie: ...@@ -90,7 +98,9 @@ class DicoTrie:
$$$ 'c' in d1 $$$ 'c' in d1
False False
""" """
... if isinstance(cle,str):
return self.contains(cle)
return False
if __name__ == '__main__': if __name__ == '__main__':
import apl1test import apl1test
......
...@@ -50,35 +50,53 @@ def indice_seq(elem: C, liste: list[C], comp: Callable[[C, C], int]) \ ...@@ -50,35 +50,53 @@ def indice_seq(elem: C, liste: list[C], comp: Callable[[C, C], int]) \
i=index i=index
return trouve,i return trouve,i
#
# def indice_dicho(elem: C, liste: list[C], comp: Callable[[C, C], int]) \ def indice_dicho(elem: C, liste: list[C], comp: Callable[[C, C], int]) \
# -> tuple[bool, int]: -> tuple[bool, int]:
# """Renvoie un couple (trouve, i) tel que: """Renvoie un couple (trouve, i) tel que:
# - si elem est un élément de liste, - si elem est un élément de liste,
# * trouve = True * trouve = True
# * i est l'indice de première occurence de elem dans liste * i est l'indice de première occurence de elem dans liste
# - si elem n'est pas un élément de la liste : - si elem n'est pas un élément de la liste :
# * trouve = False * trouve = False
# * pour tout j < i, liste[j] < liste[i] * pour tout j < i, liste[j] < liste[i]
# * 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 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 $$$ def compare(x, y): return 0 if x == y else 1 if x > y else -1
# $$$ indice_dicho(0, [1, 3, 5], compare) $$$ indice_dicho(0, [1, 3, 5], compare)
# (False, 0) (False, 0)
# $$$ indice_dicho(3, [1, 3, 5], compare) $$$ indice_dicho(3, [1, 3, 5], compare)
# (True, 1) (True, 1)
# $$$ indice_dicho(4, [1, 3, 5], compare) $$$ indice_dicho(4, [1, 3, 5], compare)
# (False, 2) (False, 2)
# $$$ indice_dicho(5, [1, 3, 5], compare) $$$ indice_dicho(5, [1, 3, 5], compare)
# (True, 2) (True, 2)
# $$$ indice_dicho(6, [1, 3, 5], compare) $$$ indice_dicho(6, [1, 3, 5], compare)
# (False, 3) (False, 3)
# $$$ indice_dicho(42, [], compare) $$$ indice_dicho(42, [], compare)
# (False, 0) (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