dmateriel = { 'costume_A': {'nb': 3, 'volume':2, 'poids':1}, 'costume_B': {'nb': 1, 'volume':6, 'poids':2}, 'chaise_bois': {'nb': 40, 'volume':50, 'poids':4}, 'chapeau_A': {'nb': 2, 'volume':3, 'poids':1}, 'chapeau_B': {'nb': 4, 'volume':7, 'poids':1}, } def tab_clefs_tab_volumes(dmatos): tab_clefs = [] tab_volumes = [] for clef, dico in dmatos.items(): tab_clefs.append(clef) tab_volumes.append(dico['volume']) return tab_clefs, tab_volumes def clefs_triees_selon_volume(dmatos): tab_clefs, tab_volumes = tab_clefs_tab_volumes(dmatos) for i in range(len(tab_clefs)-1): for j in range(i+1, len(tab_clefs)): if tab_volumes[i] > tab_volumes[j]: # On échange les volumes tab_volumes[i], tab_volumes[j] = tab_volumes[j], tab_volumes[i] # On échange les clefs correspondantes tab_clefs[i], tab_clefs[j] = tab_clefs[j], tab_clefs[i] return tab_clefs def remplissage(dmatos, vmax): vol = 0 clefs_triees = clefs_triees_selon_volume(dmatos) i = len(clefs_triees) - 1 elements = [] while i >= 0 and vol < vmax: clef = clefs_triees[i] if dmatos[clef]['nb'] == 0: i -= 1 elif vol + dmatos[clef]['volume'] <= vmax: vol += dmatos[clef]['volume'] elements.append(clef) dmatos[clef]['nb'] -= 1 else: i -= 1 return elements def nb_voitures(dmatos, vmax): elements = remplissage(dmatos, vmax) if elements == []: return 0 n = 1 while len(elements) != 0: elements = remplissage(dmatos, vmax) n += 1 return n n = 0 for clef in dmateriel: n += dmateriel[clef]['nb'] print(n)