Bonjour,

Je suis en train de monter un model de "livre dont vous êtes le héro" en Python 2. J'utilise les fichiers textes pour chaque "cellule" où l'action se passe. Lorsque je change de cellule, je lis un autre fichier texte. J'ai réussi à tout faire fonctionner sans problème pour une première cellule mais dès que j'entre dans une 2e, j'arrive sur une boucle infinie. Pourtant, le 2e fichier n'est qu'un copier coller du premier.

J'utilise le marquer "=END CHOICE TEXT=\n" pour voir la fin d'une section puisqu'il y a d'autre élément à trouver dans le fichier et cette section est répétée plusieurs fois par fichier.

Boucle où ça "plante":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
            while line != "=END CHOICE TEXT=\n":
                line = line.rstrip('\n')
                choice_text.append(line)
                line = file.readline()
Voici la fonction au complet :
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
 
    def load(self):
 
        directory = str(self.title) + '/Levels/' + str(self.coords[0]) + '=' + str(self.coords[1])
        file = open(directory, 'r')
        file.seek(0)
        line = file.readline()
        while line != "=END TEXT=\n":
            line = line.rstrip('\n')
            self.entry_txt.append(line)
            line = file.readline()        
 
        line = file.readline()
        while line != "=END CHOICE=\n":
            if line != "\n":
                line = line.rstrip('\n')
                self.choices.append(line)
                line = file.readline()
            else:
                line = file.readline()
 
        line = file.readline()
        for choices in range(len(self.choices)):
            choice_text = []
            while line != "=END CHOICE TEXT=\n":
                line = line.rstrip('\n')
                choice_text.append(line)
                line = file.readline()
            self.choices_txt.append(choice_text)
            line = file.readline()
 
        for choices in range(len(self.choices)):
            line = line.rstrip('\n')
            death = int(line)
            self.death.append(death)
            line = file.readline() # Line is a 0=0 value at this point
            line = line.rstrip("\n")
            line = line.split("=")
            target = [int(line[0]), int(line[1])]
            self.target_coords.append(target)
 
            line = file.readline() # Line is a =END TARGET STATE= if dead is 0, text if dead is 1
 
            if death == 1:
                death_txt = []
                while line != "=END TARGET STATE=\n":
                    line = line.rstrip("\n")
                    death_txt.append(line)
                    line = file.readline() # Line is a sentence until it reaches the =END TARGET STATE= value.
                self.death_txt.append(death_txt)
            else:
                self.death_txt.append('')
 
            line = file.readline() # Line is either 0/1 for the dead state or \n for the last line    
 
            if line == "\n":
   		        break
            else:
   		        continue
        file.close()
        return
Et voici le fichier qui est lu par la fonction:
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
 
FIRST FILE FIRST FILE
FIRST FILE FIRST FILE
=END TEXT=
1. First Choice
2. Second Choice
3. Third Choice
=END CHOICE=
First Choice text to display
First choice second line
=END CHOICE TEXT=
Second Choice text to display
Second choice second line
=END CHOICE TEXT=
Third Choice text to display
Third choice third line
=END CHOICE TEXT=
0
0=1
=END TARGET STATE=
0
1=0
=END TARGET STATE=
1
0=0
Some nice explanation of why the character died.
On two lines.
=END TARGET STATE=
La question est, pourquoi est-ce que ça fait une boucle infinie lorsque cette fonction est utilisée pour une 2e fois? Je sais que le 2e fichier que je tente de lire est lisible, je l'ai testé à part. J'ai des boucles qui utilise le même procédé de marqueur avant celle qui plante et qui vont très bien. J'ai essayer de modifier le marqueur (enlever \n) ou d'ajouter une condition (or if line!= "=END TARGET TEXT=") mais là c'est lors de la première utilisation que ça plante.

P.S.: Le reste du code peut ne pas être exact et apporter à d'autre problème plus tard, je commence à peine sur ça et c'est la première fois que j'utilise des class dans python alors j'ai peut-être encore mal compris certains concepts. S.V.P., ne pas en tenir compte, j'ai envie de les trouver moi-même

EDIT: J'ai trouvé. C'est tout bête. J'utilisais un "for x in range(len(self.choices)):" mais je ne vidais pas la liste de self.choices de la première utilisation. Erreure de débutant de OO. J'ai ajouté des del self.choices[:] en début et tout fonctionne. J'effacerais bien le thread mais je ne sais pas comment.