94 lines
2.9 KiB
Python
94 lines
2.9 KiB
Python
# Projet 03 — Le Podium
|
|
# Algorithme : Tri par sélection
|
|
|
|
athletes = [
|
|
{"nom": "Marcus", "pays": "JAM", "temps": 9.97},
|
|
{"nom": "Alice", "pays": "FRA", "temps": 9.85},
|
|
{"nom": "Yusuf", "pays": "TUR", "temps": 10.03},
|
|
{"nom": "Carla", "pays": "BRA", "temps": 9.97},
|
|
{"nom": "Bob", "pays": "USA", "temps": 9.91},
|
|
{"nom": "Lena", "pays": "GER", "temps": 10.11},
|
|
{"nom": "Kwame", "pays": "GHA", "temps": 9.99},
|
|
{"nom": "Sofia", "pays": "ITA", "temps": 10.07},
|
|
]
|
|
|
|
def tri_selection_athletes(athletes):
|
|
"""
|
|
Trie la liste d'athlètes par temps croissant (tri par sélection).
|
|
Le meilleur (temps le plus bas) sera en premier.
|
|
"""
|
|
n = len(athletes)
|
|
for i in range(n):
|
|
mini = i
|
|
for j in range(i + 1, n):
|
|
# TODO : comparer les temps pour trouver le minimum
|
|
if ...:
|
|
mini = j
|
|
athletes[i], athletes[mini] = athletes[mini], athletes[i]
|
|
return athletes
|
|
|
|
def afficher_podium(athletes):
|
|
"""Affiche un podium ASCII avec les 3 premiers athlètes."""
|
|
if len(athletes) < 3:
|
|
print("Pas assez d'athlètes pour un podium !")
|
|
return
|
|
|
|
or_ = athletes[0]
|
|
ar_ = athletes[1]
|
|
br_ = athletes[2]
|
|
|
|
print()
|
|
print(" 🥇")
|
|
print(" ┌───┐ 🥈 🥉")
|
|
print(" │ │ ┌───┐ ┌───┐")
|
|
print(" │ 1 │ │ 2 │ │ 3 │")
|
|
print(" │ │ │ │ │ │")
|
|
print(" └───┘ └───┘ └───┘")
|
|
print(f" {or_['nom']:^10} ({or_['pays']}) {ar_['nom']:^10} ({ar_['pays']}) {br_['nom']:^10} ({br_['pays']})")
|
|
print(f" {or_['temps']} s {ar_['temps']} s {br_['temps']} s")
|
|
print()
|
|
|
|
def temps_atteint(temps_liste, t):
|
|
"""
|
|
Recherche dichotomique : retourne True si le temps t
|
|
a été réalisé par un athlète, False sinon.
|
|
La liste temps_liste doit être triée.
|
|
"""
|
|
a = 0
|
|
b = len(temps_liste) - 1
|
|
while a <= b:
|
|
m = (a + b) // 2
|
|
if temps_liste[m] == t:
|
|
return True
|
|
elif temps_liste[m] < t:
|
|
# TODO
|
|
pass
|
|
else:
|
|
# TODO
|
|
pass
|
|
return False
|
|
|
|
|
|
# --- Programme principal ---
|
|
print("=== Compétition de Sprint ===")
|
|
print()
|
|
print("Résultats bruts :")
|
|
for a in athletes:
|
|
print(f" {a['nom']} ({a['pays']}) : {a['temps']} s")
|
|
|
|
tri_selection_athletes(athletes)
|
|
|
|
afficher_podium(athletes)
|
|
|
|
# Classement complet
|
|
print("Classement final :")
|
|
for i, a in enumerate(athletes, 1):
|
|
print(f" {i}. {a['nom']} ({a['pays']}) — {a['temps']} s")
|
|
|
|
# Recherche dichotomique
|
|
temps_liste = [a["temps"] for a in athletes]
|
|
print()
|
|
for t in [9.85, 10.00, 9.97]:
|
|
trouve = temps_atteint(temps_liste, t)
|
|
print(f"Temps {t}s réalisé ? {'Oui' if trouve else 'Non'}")
|