IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

non compréhension de l'évolution des valeurs d'une liste par un novice


Sujet :

Python

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut non compréhension de l'évolution des valeurs d'une liste par un novice
    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()
    Dernière modification par ProgElecT ; 16/09/2023 à 18h16. Motif: Suppression ligne(s) vide(s) en début de code

Discussions similaires

  1. choix des valeurs dans une liste deroulante
    Par Banzai74 dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/06/2008, 11h03
  2. Modification des valeurs d'une liste déroulante
    Par edogawa dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/01/2008, 20h12
  3. masquer des valeurs dans une liste deroulante
    Par titeZ dans le forum IHM
    Réponses: 15
    Dernier message: 09/08/2007, 15h07
  4. Réponses: 1
    Dernier message: 23/05/2007, 11h49
  5. [SQL] Problème de récupération des valeurs d'une liste multiple en php
    Par BOLARD dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/05/2006, 00h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo