Je suis en train de programmer un jeu avec la console de python pour m'entrainer et je faisais une partie du programme sur la construction des bâtiments à part pour faciliter sa conception.

Mon problème est que je dois faire évoluer puis supprimer les valeurs dans des listes, et c'est cette évolution que je ne comprends pas :
mon programme devrait en théorie enlever 0.5 à la liste "projet_batiment_temps_construction" (visible plus bas dans le message), et supprimer la valeur quand elle arrive à zéro, et supprimer les valeurs/mots de même index dans deux autres listes. Et quand je teste le programme certaines valeurs n'évoluent pas pendant plusieurs "tour" (un tour correspond à un appel de la fonction), si bien qu'au lieu de traiter et supprimer les valeurs de la liste (et d'incrémenter les variables des bâtiments construits (et non de ceux en construction)) en 6 "tours", il lui en faut 7, d'autant plus que les derniers à être traités sont ceux qui devrait l'être en 2 "tours".
Et malgré que j'ai regardé plusieurs fois le programme et changé ce qui semblait poser problème, soit rien n'a changé, soit ça a très partiellement amélioré la situation (me rendant d'autant plus confus que je pensais qu'il s'agissait d'un problème simple).

Il est très probable que le code ne soit pas optimisé, mais je suis ouvert aux conseils.

voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
# Les bâtiments construits sont stockés dans ces variables
maison_niv_1 = 0
maison_niv_2 = 0
maison_niv_3 = 0
entrepot_niv_1 = 0
entrepot_niv_2 = 0
entrepot_niv_3 = 0
total_batiment = 0
 
# Les projets de bâtiments en cours sont stockés dans ces listes,
# la première pour leurs noms/types, la deuxième pour leurs niveaux 1, 2 ou 3 et la dernière pour le temps de construction
projet_batiment_nom = []
projet_batiment_niv = []
projet_batiment_temps_construction = []
 
# ce groupe de 6 variables ne sert qu'à déterminer (plus loin dans le code) la vitesse de construction et à constater les coûts de construction
batisseur = 1
 
bois = 10000
pierre = 10000
 
surface_construite = 0.0
surface_constructible = 10000
 
nombre_heure_travaille = 8
 
# Cette fonction permet de completer les listes précédemment établies (je l'ai implémentée dans ce code car elle est nécessaire, mais je l'avais programmée avant)
def projet_construction(nombre, niv, type):
    global projet_batiment_nom
    global projet_batiment_niv
    global projet_batiment_temps_construction
    global bois
    global pierre
    global surface_constructible
    global surface_construite
    if type == "maison" :
        if niv == 1:
            for quantité in range(nombre) :
                projet_batiment_nom.append("maison")
                projet_batiment_niv.append(1)
                projet_batiment_temps_construction.append(2.0)
                bois -= 5
                pierre -= 4
                surface_constructible -= 1
                surface_construite += 1
 
        elif niv == 2:
            for quantité in range(nombre) :
                projet_batiment_nom.append("maison")
                projet_batiment_niv.append(2)
                projet_batiment_temps_construction.append(3.0)
                bois -= 6
                pierre -= 7
                surface_constructible -= 2.5
                surface_construite += 2.5
 
        elif niv == 3:
            for quantité in range(nombre) :
                projet_batiment_nom.append("maison")
                projet_batiment_niv.append(2)
                projet_batiment_temps_construction.append(4.0)
                bois -= 8
                pierre -= 11
                surface_constructible -= 4.5
                surface_construite += 4.5
 
        elif nombre == 0 :
            pass
        else :
            print("Vous avez du faire erreur dans votre demande de construction de maison...")
 
    if type == "entrepôt" :
        if niv == 1:
            for quantité in range(nombre) :
                projet_batiment_nom.append("entrepôt")
                projet_batiment_niv.append(1)
                projet_batiment_temps_construction.append(1.0)
                bois -= 10
                pierre -= 1
                surface_constructible -= 2
                surface_construite += 2
 
        elif niv == 2:
            for quantité in range(nombre) :
                projet_batiment_nom.append("entrepôt")
                projet_batiment_niv.append(2)
                projet_batiment_temps_construction.append(2.0)
                bois -= 16
                pierre -= 3
                surface_constructible -= 5
                surface_construite += 5
 
        elif niv == 3:
            for quantité in range(nombre) :
                projet_batiment_nom.append("entrepôt")
                projet_batiment_niv.append(3)
                projet_batiment_temps_construction.append(3.0)
                bois -= 23
                pierre -= 5
                surface_constructible -= 9
                surface_construite += 9
 
        elif nombre == 0 :
            pass
        else :
            print("Vous avez du faire erreur dans votre demande de construction d'entrepôt...")
"""
Cette fonction est celle que je suis en train de faire,
elle doit permettre de faire évoluer les valeurs des listes de telle sorte que le temps de construction des bâtiments soit réduit de 0.5 à chaque utilisation 
et une fois cette valeur à 0, elle doit suprimmer le bâtiment des 3 listes et incrémenter les 7 premières variables décrites au tout début du code en fonction du bâtiment construit
"""
def avancement_construction():
    global projet_batiment_nom
    global projet_batiment_niv
    global projet_batiment_temps_construction
    global maison_niv_1
    global maison_niv_2
    global maison_niv_3
    global entrepot_niv_1
    global entrepot_niv_2
    global entrepot_niv_3
    global total_batiment
    global nombre_heure_travaille
 
    # Cette variable indique quel index des listes traite la fonction, on part du plus grand vers le plus petit (pour éviter que l'index soit décalé à chaque modification)
    index_avancement = len(projet_batiment_nom)-1
 
    for quantiter in range(len(projet_batiment_nom)) :
 
        # vitesse de construction (0.5 par tour en tout)
        projet_batiment_temps_construction[index_avancement] -= batisseur * 0.0625 * nombre_heure_travaille
 
        if projet_batiment_temps_construction[index_avancement] <= 0 :# si le bâtiment a fini d'être construit ou non
            if projet_batiment_nom[index_avancement] == "maison": # vérification du type de bâtiment
                if projet_batiment_niv[index_avancement] == 1 : # vérification du niveau du bâtiment
                    maison_niv_1 += 1
                    total_batiment += 1
                    # supression des données des trois listes
                    del projet_batiment_nom[index_avancement]
                    del projet_batiment_niv[index_avancement]
                    del projet_batiment_temps_construction[index_avancement]
 
                # même principe pour la suite, mais pour les niveaux 2 et 3 de ce type de bâtiment. Puis, plus loin, le type suivant
                elif projet_batiment_niv[index_avancement] == 2 :
                    maison_niv_2 += 1
                    total_batiment += 1
                    del projet_batiment_nom[index_avancement]
                    del projet_batiment_niv[index_avancement]
                    del projet_batiment_temps_construction[index_avancement]
 
                elif projet_batiment_niv[index_avancement] == 3 :
                    maison_niv_3 += 1
                    total_batiment += 1
                    del projet_batiment_nom[index_avancement]
                    del projet_batiment_niv[index_avancement]
                    del projet_batiment_temps_construction[index_avancement]
                index_avancement -= 1 # changement d'index une fois l'action effectuée
 
            elif projet_batiment_nom[index_avancement] == "entrepôt" :
 
                if projet_batiment_niv[index_avancement] == 1 :
                    entrepot_niv_1 += 1
                    total_batiment += 1
                    del projet_batiment_nom[index_avancement]
                    del projet_batiment_niv[index_avancement]
                    del projet_batiment_temps_construction[index_avancement]
 
                elif projet_batiment_niv[index_avancement] == 2 :
                    entrepot_niv_2 += 1
                    total_batiment += 1
                    del projet_batiment_nom[index_avancement]
                    del projet_batiment_niv[index_avancement]
                    del projet_batiment_temps_construction[index_avancement]
 
                elif projet_batiment_niv[index_avancement] == 3 :
                    entrepot_niv_3 += 1
                    total_batiment += 1
                    del projet_batiment_nom[index_avancement]
                    del projet_batiment_niv[index_avancement]
                    del projet_batiment_temps_construction[index_avancement]
                index_avancement -= 1
 
#les listes sont remplies via la fonction "projet_construction"
projet_construction(3, 1, "entrepôt")
projet_construction(5, 2, "maison")
projet_construction(3, 1, "maison")
projet_construction(2, 2, "entrepôt")
 
# fonction donnant les informations sur l'évolution des variables
def print_test() :
    print(projet_batiment_nom)
    print(projet_batiment_niv)
    print(projet_batiment_temps_construction)
    print(maison_niv_1)
    print(maison_niv_2)
    print(maison_niv_3)
    print(entrepot_niv_1)
    print(entrepot_niv_2)
    print(entrepot_niv_3)
    print(total_batiment)
    print("")
    avancement_construction()
 
print_test()
print_test()
print_test()
print_test()
print_test()
print_test()
print_test()