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 !”)
Scroll to Top