1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#essai avec des dictionnaire
import time
import random
random.seed(int(time.time()))
def choix(dispo):
free_hours = [pos for pos, dispo in enumerate(dispo)]
return random.choice(free_hours)
a,b,c,d=3,3,2,2
profs=[
{"nom" : "mich","dispo" : [1,0,1,0,0,1,0,0,1,1],"temps" : a},
{"nom" : "juju","dispo" : [1,1,0,1,1,0,0,0,1,0],"temps" : b},
{"nom" : "dédé","dispo" : [1,0,0,0,1,1,0,1,0,0],"temps" : c},
{"nom" : "gégé","dispo" : [0,0,1,0,1,1,1,0,1,1],"temps" : d},
]
i=1#variable pour le bouclage
liste=[]#liste intermédiaire pour la réorganisation.
for i in range (0,10):
for p in profs:
liste.append(p["dispo"][i])
#dictionnaire qui contient toutes les heures et les disponibilités par profs
heures=[
{"indexX": "1","dispos":liste[0:4],"somme":sum(liste[0:4])},
{"indexX": "2","dispos":liste[4:8],"somme":sum(liste[4:8])},
{"indexX": "3","dispos":liste[8:12],"somme":sum(liste[8:12])},
{"indexX": "4","dispos":liste[12:16],"somme":sum(liste[12:16])},
{"indexX": "5","dispos":liste[16:20],"somme":sum(liste[16:20])},
{"indexX": "6","dispos":liste[20:24],"somme":sum(liste[20:24])},
{"indexX": "7","dispos":liste[24:28],"somme":sum(liste[24:28])},
{"indexX": "8","dispos":liste[28:32],"somme":sum(liste[28:32])},
{"indexX": "9","dispos":liste[32:36],"somme":sum(liste[32:36])},
{"indexX": "10","dispos":liste[36:40],"somme":sum(liste[36:40])},
]#réorganisation de la grande liste en 10 petites correspondantes à chaque heure.
listfinal=[0,0,0,0,0,0,0,0,0,0]
index=0
for p in heures:#première boucle ou on affecte les heures ou on n'a pas le choix
if p["somme"] == 1 :
numero=p["dispos"].index(1)
profs[numero]["temps"] -= 1
listfinal[index]=numero
index += 1
index=0
for p in heures:#deuxième boucle pour les heures n'ayant pas été casées par la première
if p["somme"] != 1:
i=1
while i == 1:
ch=choix(p["dispos"])#choix d'un prof dispo, ch est son index
if profs[ch]["temps"] > 0:#si il a du temps libre
listfinal[index] = ch #ajouter le numéro du prof à la liste finale
profs[ch]["temps"] -= 1
i=2
else:
i=1
index+=1
#vérification du nombre d'heures
print (listfinal.count(0))
print (listfinal.count(1))
print (listfinal.count(2))
print (listfinal.count(3))
#affichage final
print ("mich=0, juju=1, dédé=2, gégé=3")
print (listfinal) |
Partager