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 :

Boucle while demandant deux fois l'input avant d'executer les instructions


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Par défaut Boucle while demandant deux fois l'input avant d'executer les instructions
    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:

    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
    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
    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
    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.
    Un petit florilège bien pompeux mais précis de ce que j'ai fait:

    la solution de Error-SyntacticalRemorse sur stack

    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
    sur Repl.it aucun problème dans mon Terminal se répète deux fois.

    Essayer d'enlever les indentations des fois que ça marche.
    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
    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
    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 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.
    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.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par AvySamaj Voir le message
    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.
    A priori, c'est un problème avec l'IDE Eclipse que vous ne reproduisez pas en dehors. Et comme un IDE est juste un outil pour mettre au point un code qui devra s'en passer, s'il n'y a pas de soucis "hors eclipse"...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    A priori, c'est un problème avec l'IDE Eclipse que vous ne reproduisez pas en dehors.
    - W
    J'ai écrit précisément " j'ai bien essayé dans mon terminal sur Ubuntu 18.04.2 qui me donne exactement le même problème."
    Autrement dit ça se reproduit en dehors de l'IDE.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par AvySamaj Voir le message
    J'ai écrit précisément " j'ai bien essayé dans mon terminal sur Ubuntu 18.04.2 qui me donne exactement le même problème."
    Autrement dit ça se reproduit en dehors de l'IDE.
    Cà ne se produit pas chez moi lorsque je le lance via "python script.py" et le fonctionnement (un seul input lorsqu'on entre "2") est cohérent avec le contenu du script. A partir de là, pas facile d'en faire un problème Python et si vous le constatez, c'est d'abord un soucis d'environnement (spécifique à votre machine).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Par défaut
    Très bien. Ça revient vraisemblablement à trouver une aiguille dans une botte de foin tel que c'est parti. Merci d'avoir tenté de votre côté pour me dire le résultat donné.

  6. #6
    Membre confirmé Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Par défaut
    Apparemment c'est lié à l'arborescence du projet.
    Voici comment se présente l'arborescence d'un projet scrapy lorsqu'on l'installe avec la commande scrapy startproject Nom_projet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Nom_projet/
       |__ scrapy.cfg
       |__Nom_projet/ #y a bien deux dossiers avec le même nom automatiquement
               |__ __init__.py
               |__ items.py
               |__ middlewares.py #et plein d'autres fichiers dans le genre
               |__ Spiders/
                       |__ __init__.py
                       |__ spiders_a.py #autant de fichiers contenant une ou plusieurs class spiders
    Et bien le fichier dont il est question dans ce topic bug en me redemandant deux fois la même chose en étant mis dans le dossier Spiders, mais interroge une seule fois (donc pas de bug) lorsqu'il se trouve dans le dossier Nom_projet (le deuxième).
    Ça ne semble pas dû à l'environnement mais vraiment à l'arborescence. Je ne comprend pas le pourquoi, mais j'ai en tout cas la solution sans la comprendre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle while avec deux variables
    Par juliette81 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/10/2015, 13h47
  2. Exécuter 2 boucles while avec deux variables en même temps.
    Par gagnant16 dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/04/2014, 22h04
  3. Splitter deux fois et exécuter un script avec les valeurs
    Par Sarolion11 dans le forum VBScript
    Réponses: 3
    Dernier message: 31/05/2013, 11h13
  4. [AC-2003] Boucle While .. Wend sur un recordset qui ne s'execute pas
    Par mamadouabd dans le forum VBA Access
    Réponses: 6
    Dernier message: 24/11/2009, 20h00
  5. boucle while - passe deux fois dans la boucle.
    Par Benji01 dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/05/2008, 12h23

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