import random
import random
from collections import defaultdict
import pandas as pd # pour exporter vers Excel
# — Paramètres de base —
nb_personnes = 42
nb_postes = 10
tailles_postes = [3, 2, 2, 1, 1, 1, 1, 1, 1, 1] # nombre de personnes par poste
tours = 3 # nombre de rotations
# — Création de la liste des personnes —
personnes = [f”Personne_{i+1}” for i in range(nb_personnes)]
# — Dictionnaire pour enregistrer les affectations —
affectations_precedentes = defaultdict(list)
def assigner_tour(personnes, affectations_precedentes):
“””Assigne les personnes à chaque poste pour un tour sans répétition”””
random.shuffle(personnes)
cycle = {i+1: [] for i in range(nb_postes)}
index = 0
for id_poste, taille in enumerate(tailles_postes, start=1):
compteur = 0
while compteur < taille and index < len(personnes):
personne = personnes[index]
# Vérifie que la personne n’a jamais été dans ce poste
if id_poste not in affectations_precedentes[personne]:
cycle[id_poste].append(personne)
affectations_precedentes[personne].append(id_poste)
compteur += 1
index += 1
# Si on n’a pas rempli le poste, on complète avec des personnes valides restantes
if compteur < taille:
restantes = [
p for p in personnes
if id_poste not in affectations_precedentes[p]
and p not in cycle[id_poste]
]
besoin = taille - compteur
if len(restantes) >= besoin:
choisis = random.sample(restantes, besoin)
for p in choisis:
cycle[id_poste].append(p)
affectations_precedentes[p].append(id_poste)
return cycle
# — Exécution des 3 tours —
tous_les_tours = []
for num_tour in range(1, tours + 1):
cycle = assigner_tour(personnes, affectations_precedentes)
print(f”\n=== TOUR {num_tour} ===”)
for id_poste, pers in cycle.items():
print(f”Poste {id_poste}: {‘, ‘.join(pers)}”)
tous_les_tours.append(cycle)
# — Exporter vers Excel —
# Chaque tour devient une feuille séparée
with pd.ExcelWriter(“repartition_postes.xlsx”) as writer:
for i, tour in enumerate(tous_les_tours, start=1):
data = []
for poste, pers in tour.items():
for p in pers:
data.append({“Tour”: i, “Poste”: poste, “Personne”: p})
df = pd.DataFrame(data)
df.to_excel(writer, sheet_name=f”Tour_{i}”, index=False)
print(“\n✅ Fichier ‘repartition_postes.xlsx’ créé avec succès !”)