You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
3.1 KiB

  1. class Borda:
  2. """
  3. Classe pour implementer la methode de Borda.
  4. https://fr.wikipedia.org/wiki/M%C3%A9thode_Borda
  5. Args:
  6. projects: La liste des projets soumis au vote.
  7. """
  8. def __init__(self, projects):
  9. self.projects = projects
  10. self.scores = {}
  11. def calculate_scores(self, votes):
  12. """
  13. Calcule le score de Borda pour chaque projet.
  14. Args:
  15. votes: Une liste de listes contenant les votes des membres du groupe.
  16. Returns:
  17. Un dictionnaire avec les scores de Borda pour chaque projet.
  18. """
  19. for vote in votes:
  20. for i, project in enumerate(vote):
  21. if project not in self.scores:
  22. self.scores[project] = 0
  23. self.scores[project] += len(vote) - i - 1
  24. def get_winner(self):
  25. """
  26. Retourne le projet avec le score de Borda le plus eleve.
  27. Returns:
  28. Le projet gagnant.
  29. """
  30. winner = None
  31. max_score = -float("inf")
  32. for project, score in self.scores.items():
  33. if score > max_score:
  34. max_score = score
  35. winner = project
  36. return winner
  37. def borda_score(votes):
  38. scores = {}
  39. positions = {}
  40. for i, vote in enumerate(votes):
  41. for j, project in enumerate(vote):
  42. if project not in scores:
  43. scores[project] = 0
  44. positions[project] = {}
  45. scores[project] += len(vote) - j - 1
  46. if j not in positions[project]:
  47. positions[project][j+1] = 0
  48. positions[project][j+1] += 1
  49. return scores, positions
  50. # Place aux votes
  51. projects = ["A", "B", "C", "D", "E", "F", "G", "H", "I"]
  52. projects_name = {
  53. "A": "Accidents routiers en France",
  54. "B": "Blood cells classification",
  55. "C": "Classification de produits e-commerce Rakuten",
  56. "D": "Emission de CO2 par les vehicules",
  57. "E": "Prevision meteo en Australie",
  58. "F": "Reconnaissance de champignons",
  59. "G": "Reconnaissance de plantes",
  60. "H": "Supply Chain - Satisfaction des clients",
  61. "I": "Temps de Reponse de la Brigade des Pompiers de Londres",
  62. }
  63. borda = Borda(projects)
  64. votes = [
  65. ["F", "B", "G", "D", "I", "E", "A", "H", "C"], # Heuzef - @heuzef
  66. ["A", "B", "C", "D", "E", "F", "G", "H", "I"], # Yvan - @.......
  67. ["A", "B", "C", "D", "E", "F", "G", "H", "I"], # Viktoriia - @.......
  68. ["A", "B", "C", "D", "E", "F", "G", "H", "I"], # Florent - @FConstantMovework
  69. ]
  70. borda.calculate_scores(votes)
  71. winner = borda.get_winner()
  72. print(f"""
  73. Rires et roulements de tambour ... Le suspense est a son comble ...
  74. Apres un vote palpitant, c'est avec une immense joie que nous vous annoncons le grand gagnant :
  75. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  76. LE PROJET {winner} : {projects_name[winner]} !!!
  77. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  78. Applaudissements nourris et cris de joie s'il vous plait !
  79. N'oubliez pas, il n'y a pas de perdants aujourd'hui, seulement des participants formidables !
  80. Merci a tous d'avoir participe a ce vote !
  81. """)
  82. # Affichage des rangs
  83. scores, positions = borda_score(votes)
  84. for project, score in scores.items():
  85. print(f"Projet {project} : {projects_name[project]}")
  86. for position, nb_votes in positions[project].items():
  87. print(f" Position => {position}\n")