Bonjour, j'utilise Python 3.7.1 (default, Dec 14 2018, 19:28:38).
En premier lieu mon script n'a pas de problème majeur c'est juste que je préférerais qu'il m'interroge sur l'input qu'une seule fois. Dans le code j'ai mis des print() pour qu'on voit en temps réel ce qu'il se passe dans l’exécution.
Avec un autre membre de stackoverflow on a même utiliser le site Repl.it pour voir ce que le script faisait et le soucis c'est que sur ce site même en insérant mon propre script non modifié je ne suis interrogé qu'une fois alors que depuis mon terminal sur Eclipse je suis interrogé deux fois.
Voici le code qui se trouvait au départ dans le script:
Avec ce code dans Repl.it comme je vous le disait je ne suis interrogé qu'une fois, mais dans mon terminal sur Eclipse voici ce que j'obtiens:
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 ##IMPORTS #from pymongo import MongoClient #import subprocess #from scrapy import cmdline #instructions pour connexion à la base mongo ##CHOIX DU CHAMP## champ_choix="" while champ_choix!="1" and champ_choix!="2": champ_choix=input("Pour cat_course tapez 1\nPour hippodrome tapez 2\n") print("L'input est : {}".format(champ_choix)) print("le type de l'input est: {}".format(type(champ_choix))) if champ_choix=="1":#Traite le champ hippodrome print("on a le champ_choix 1") ##CHOIX DE LA COLLECTION## collection_num="" while collection_num!="1" and collection_num!="2": collection_num=input("Pour la collection geny_rapp tapez 1\nPour la collection geny_cotes tapez 2\n") #instructions envers la base de données mongo, qui interrogent, fait des corrections avant de mettre à jour. ##MAJ## if collection_num=="1": collection_name = 'geny_rapp' if collection_num=="2": collection_name = 'geny_cotes' #instructions qui font les MAJ vers les collections choisis break if champ_choix=="2": print("le champ_choix est 2") #lance un spider avec scrapy break
Donc nous avons compris que ça ne venait pas de mon script, pcq je peux vous dire que je l'ai retourné dans tous les sens, en changeant les indentations des fois que ça change qqch.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Pour cat_course tapez 1 Pour hippodrome tapez 2 2 # je rentre un input correct L'input est : 2 # ça me confirme même que mon input est correct le type de l'input est: <class 'str'> # ça me confirme même que c'est le bon type le champ_choix est 2 # et ça me dit bien que je suis dans la deuxième condition `if` Pour cat_course tapez 1 # mais je suis interrogée de nouveau, et les instructions (lancer un spider) ne sont pas exécutées. Pour hippodrome tapez 2 2 # j'entre une nouvelle fois un input correct L'input est : 2 le type de l'input est: <class 'str'> le champ_choix est 2 # on est une nouvelle fois dans la deuxième condition `if` et ça va maintenant enfin exécuter les instructions #Lance le spider comme attendu, tout va bien #Arrête le programme et sort, tout va bien aussi
Un petit florilège bien pompeux mais précis de ce que j'ai fait:
la solution de Error-SyntacticalRemorse sur stack
sur Repl.it aucun problème dans mon Terminal se répète deux fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #import subprocess #from scrapy import cmdline #import sys while True: champ_choix = input("Pour cat_course tapez 1\nPour hippodrome tapez 2\n") if champ_choix == "2": print("le champ_choix est 2") #lance un spider if champ_choix in ["1", "2"]: print("autre choix") break
Essayer d'enlever les indentations des fois que ça marche.
j'ai égalment essayer d'identer l'intérieure de la boucle while collection_num!="1" and collection_num!="2": comme ceci
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 ##IMPORTS #from pymongo import MongoClient #import subprocess #from scrapy import cmdline #instructions pour connexion à la base mongo ##CHOIX DU CHAMP## champ_choix="" while champ_choix!="1" and champ_choix!="2": champ_choix=input("Pour cat_course tapez 1\nPour hippodrome tapez 2\n") print("L'input est : {}".format(champ_choix)) print("le type de l'input est: {}".format(type(champ_choix))) if champ_choix=="1":#Traite le champ hippodrome print("on a le champ_choix 1") ##CHOIX DE LA COLLECTION## collection_num="" while collection_num!="1" and collection_num!="2": collection_num=input("Pour la collection geny_rapp tapez 1\nPour la collection geny_cotes tapez 2\n") #instructions envers la base de données mongo, qui interrogent, fait des corrections avant de mettre à jour. ##MAJ## if collection_num=="1": collection_name = 'geny_rapp' if collection_num=="2": collection_name = 'geny_cotes' #instructions qui font les MAJ vers les collections choisis #on enlève break pcq sinon ça va lever une erreur if champ_choix=="2": print("le champ_choix est 2") #lance un spider avec scrapy
Et bien que ça puisse paraître stupide, au moins j'essaie de voir, mais ça marche très bien dans Repl.it mais pas dans mon Terminal.
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 ##IMPORTS #from pymongo import MongoClient #import subprocess #from scrapy import cmdline #instructions pour connexion à la base mongo ##CHOIX DU CHAMP## champ_choix="" while champ_choix!="1" and champ_choix!="2": champ_choix=input("Pour cat_course tapez 1\nPour hippodrome tapez 2\n") print("L'input est : {}".format(champ_choix)) print("le type de l'input est: {}".format(type(champ_choix))) if champ_choix=="1":#Traite le champ hippodrome print("on a le champ_choix 1") ##CHOIX DE LA COLLECTION## collection_num="" while collection_num!="1" and collection_num!="2": collection_num=input("Pour la collection geny_rapp tapez 1\nPour la collection geny_cotes tapez 2\n") #ICI ON IDENTE #instructions envers la base de données mongo, qui interrogent, fait des corrections avant de mettre à jour. ##MAJ## if collection_num=="1": collection_name = 'geny_rapp' if collection_num=="2": collection_name = 'geny_cotes' #instructions qui font les MAJ vers les collections choisis break if champ_choix=="2": print("le champ_choix est 2") #lance un spider avec scrapy break
Et vous noterez que ma verison de python n'est pas la même que celle de Repl.it, la mienne étant Python 3.7.1 (default, Dec 14 2018, 19:28:38) et Repl.it étant Python 3.6.1 (default, Dec 2015, 13:05:11).
Et pour être sûr que ce n'est pas spécialement dû à mon Terminal dans Eclipse, j'ai bien essayé dans mon terminal sur Ubuntu 18.04.2 qui me donne exactement le même problème.
Autant ce n'est pas un problème grave d'avoir à entrer la commande deux fois, autant je préférerais que ça ne le fasse qu'une seule fois.
Partager