Problème code pipotron

Le problème exposé dans ce sujet a été résolu.

Salut à tous,

j'ai voulu créer un pipotron modulaire (avec les verbes et noms dans deux fichiers différents) seulement je tombe sur une erreur que je ne comprend pas dans le code suivant :

 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
#pipotron
import random
import os

#déclaration variables + ouvertures fichier
i_noms=0
i_verbes=0
noms = open("noms.txt","r")
verbes = open("verbes.txt","r")
verbe1=""
verbe2=""
noms1=""
noms2=""
continuer="oui"

#calcul nombre de ligne de chaque fichier
for ligne in noms:
    i_noms+=1
for ligne in verbes:
    i_verbes+=1

while continuer == "oui":   
    #randomisation
    n_verbe1=int(random.randint(1,i_verbes))
    n_verbe2=int(random.randint(1,i_verbes))

    n_noms1=int(random.randint(1,i_noms))
    n_noms2=int(random.randint(1,i_noms))

    #choix mots
    verbe1=verbes.readline()[n_verbe1]
    verbe2=verbes.readline()[n_verbe2]
    noms1=verbes.readline()[n_noms1]
    noms2=verbes.readline()[n_noms2]

    #phrase
    print("Il faut ",verbe1," ",noms1," pour ",verbe2," ",noms2)

    #continue
    continuer=input("Pour recommencer tappez oui : ")

os.system("pause")

J'ai une erreur :

1
2
3
4
Traceback (most recent call last):
  File "C:\Users\apiloy\Desktop\pipotron.py", line 31, in <module>
    verbe1=verbes.readline()[n_verbe1]
IndexError: string index out of range

Pourtant j'ai bien une valeur qui me semble numérique et non un string donc je ne comprend pas …

Merci par avance à ceux qui pourront m'aider :)

1
verbe1=verbes.readline()[n_verbe1]

Cette ligne te donne le caractère à la position n_verbe1 de la 1ère ligne de ton fichier (au passage, pas sûr que ça soit ce que tu veux). Il suffit donc que l'indice soit plus grand que la taille de la ligne pour que tu obtiennes ton erreur

+0 -0

Ah effectivement j'ai utilisé readline()[] suite à une discussion sur le forum pour obtenir une info d'une ligne en fonction de son numéro mais je vais tester ta solution nohar ça me parait 10 fois plus simple :)

EDIT: Ca fonctionne

Code pour les intéressés :

 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
#pipotron
import random
import os

#déclaration variables + ouvertures fichier

noms = open("noms.txt").read().splitlines()
verbes = open("verbes.txt").read().splitlines()
verbe1=""
verbe2=""
noms1=""
noms2=""
continuer="oui"


while continuer == "oui":   

    #choix mots
    verbe1=random.choice(verbes)
    verbe2=random.choice(verbes)
    noms1=random.choice(noms)
    noms2=random.choice(noms)

    #phrase
    print("Il faut ",verbe1," ",noms1," pour ",verbe2," ",noms2)

    #continue
    continuer=input("Pour recommencer tappez oui : ")

os.system("pause")
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte