82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
# Projet 02 — Le Tri de Cartes
|
|
# Algorithme : Tri par insertion
|
|
|
|
NOMS_VALEURS = {11: "Valet", 12: "Dame", 13: "Roi", 14: "As"}
|
|
|
|
def nom_carte(carte):
|
|
"""Retourne une représentation lisible d'une carte."""
|
|
valeur, couleur = carte
|
|
nom = NOMS_VALEURS.get(valeur, str(valeur))
|
|
return f"{nom} de {couleur}"
|
|
|
|
def afficher_main(main):
|
|
"""Affiche toutes les cartes d'une main."""
|
|
print("Main :", " | ".join(nom_carte(c) for c in main))
|
|
|
|
def tri_insertion_cartes(main):
|
|
"""
|
|
Trie la main de cartes par valeur croissante (tri par insertion).
|
|
Chaque carte est un tuple (valeur, couleur).
|
|
On trie selon le premier élément du tuple : la valeur.
|
|
"""
|
|
for i in range(1, len(main)):
|
|
x = main[i]
|
|
j = i
|
|
# TODO : compléter la condition du while
|
|
# Indice : on compare les valeurs (main[j-1][0] et x[0])
|
|
while j > 0 and ...:
|
|
main[j] = main[j - 1]
|
|
j -= 1
|
|
main[j] = x
|
|
return main
|
|
|
|
def chercher_carte(main_triee, valeur):
|
|
"""
|
|
Recherche dichotomique : retourne True si une carte de cette valeur
|
|
est dans la main triée, False sinon.
|
|
"""
|
|
a = 0
|
|
b = len(main_triee) - 1
|
|
while a <= b:
|
|
m = (a + b) // 2
|
|
valeur_m = main_triee[m][0] # on compare les valeurs
|
|
if valeur_m == valeur:
|
|
return True
|
|
elif valeur_m < valeur:
|
|
# TODO
|
|
pass
|
|
else:
|
|
# TODO
|
|
pass
|
|
return False
|
|
|
|
|
|
# --- Programme principal ---
|
|
main = [
|
|
(7, "Coeur"),
|
|
(2, "Pique"),
|
|
(11, "Trèfle"),
|
|
(5, "Carreau"),
|
|
(14, "Coeur"),
|
|
(9, "Pique"),
|
|
(3, "Carreau"),
|
|
]
|
|
|
|
print("=== Le Tri de Cartes ===")
|
|
print()
|
|
print("Avant le tri :")
|
|
afficher_main(main)
|
|
|
|
tri_insertion_cartes(main)
|
|
|
|
print()
|
|
print("Après le tri par insertion :")
|
|
afficher_main(main)
|
|
|
|
print()
|
|
# Test de recherche
|
|
for valeur_cherchee in [7, 12, 14, 6]:
|
|
resultat = chercher_carte(main, valeur_cherchee)
|
|
nom = NOMS_VALEURS.get(valeur_cherchee, str(valeur_cherchee))
|
|
print(f"Cherche {nom} : {'trouvé !' if resultat else 'absent'}")
|