Problème de boucle while ne s'effectuant qu'une seule fois

Résolu/Fermé
clems94 - Modifié le 20 avril 2020 à 16:47
 clems94 - 21 avril 2020 à 10:01
Bonjour,

Je cherche à déterminer la répartition de tailles de colis (1000 unités, 500 unités, 100 unités et 50 unités) en fonction de nombre d'unités dans chaque dotation à faire.

Pour cela, dans la fonction ci-dessous, j'appelle deux fonctions (testées et éprouvées) dans une première boucle while :
- "éclatement_unique", qui transforme un nombre d'unités en liste de nombres de boites par tailles de colis ( 17850 ==> 17 boîtes de 1000, etc.)
- "adaptation_colisage", qui adapte le résultat précédent en fonction des quantités de boites données dans "Colisage"

La seconde boucle while me sert à mettre à jour les quantités restantes dans le colisage en fonction du résultat de la première boucle while.

Mon problème (ci-dessous) est que la seconde boucle while ne semble s'activer qu'une seule fois, au lieu de s'activer à chaque boucle "while 1".

Quelqu'un pourrait m'indiquer pourquoi s'il vous plaît? Je deviens chèvre..

***FONCTION ECLATEMENT GLOBAL***
def éclatement_global(dotations, grandeurs_colisage, repartitions, colisage) :
    i = 0
    j = 0
    while i < (len(dotations)) :
        repartitions[i] = éclatement_unique(dotations[i], grandeurs_colisage, repartitions[i])
        print("Repartition après éclatement : {}".format(repartitions[i]))
        repartitions[i] = adaptation_colisage(repartitions[i], grandeurs_colisage, colisage)
        print("Repartition après adaptation : {}".format(repartitions[i]))
        
        while j < (len(repartitions[i])) :
            
            colisage[j] = colisage[j] - repartitions[i][j]
            print("Colisage : {}".format(colisage[j]))
            
            j += 1
        
        i += 1
    return repartitions



### REPONSE CONSOLE***
Repartition après éclatement : [17, 1, 3, 1]
Repartition après adaptation : [10, 15, 3, 1]
Colisage : 0
Colisage : 15
Colisage : 47
Colisage : 79
Repartition après éclatement : [6, 1, 1, 1]
Repartition après adaptation : [0, 13, 1, 1]
Repartition après éclatement : [10, 1, 0, 0]
Repartition après adaptation : [0, 15, 30, 0]
[[10, 15, 3, 1], [0, 13, 1, 1], [0, 15, 30, 0]]


Configuration: Windows / Chrome 80.0.3987.163

2 réponses

jee pee Messages postés 40475 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 novembre 2024 9 428
20 avril 2020 à 16:51
Bonjour,

Parce qu'il faut peut être que tu mettes j=0 avant le while j, pas avant le while i.

Tu pourrais aussi utiliser un FOR plutot qu'un WHILE, le FOR se chargeant de l'initialisation et de l'incrémentation de l'indice.

Cdlt
0
Merci beaucoup pour ta réponse, et ta suggestion !
Tu m'as effectivement débloqué, je ferai plus attention la prochaine fois !
0