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 :

Stopper boucle d'input pour liste [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Stopper boucle d'input pour liste
    Bonjour à tous,

    J'espère que je poste mon topic au bon endroit.

    Je débute la programmation sur Python en faisant plusieurs exercices.
    J'ai rencontré un petit problème assez récurrent auquel j'aurais voulu trouver une solution.
    Je souhaite créer une liste de plusieurs nombres, ces nombres étant déterminés par l'user via la fonction input. Pour ce faire je créé une boucle while dans laquelle l'user est amené à input ses choix. Mon soucis vient du fait que je n'arrive pas à stopper cette boucle sans interdire à l'user l'usage d'un nombre spécifique.

    voici mon exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    liste = []
    entrée = 0
    while entrée != -1:
        entrée = int(input("entrez votre nombre: "))
        if entrée == -1:
            break
        liste.append(entrée)
    print(liste)
    dans cet exemple je suis obligé de "condamner" l'utilisation du nombre -1 pour sortir de ma boucle. (par ailleurs, je pense, mais vous pourrez me le confirmer que la condition avec le "break" est sans doute redondante). J'ai essayé plusieurs variantes comme par exemple celui-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    liste = []
    entrée = 0
    while entrée != "":
        entrée = int(input("entrez votre nombre: "))
        if entrée == "":
            break
        liste.append(entrée)
    print(liste)
    mon problème vient alors du fait que l'input du user n'est pas un integer et que donc le programme plante. et si j'enlève l'integer (que je ne convertis pas l'input) je ne peux plus utiliser ma liste pour y appliquer des opérations mathématiques par exemple.

    J'espère que j'ai été clair dans mes propos.
    est ce que quelqu'un aurait une idée pour résoudre mon problème?
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par benja92 Voir le message
    est ce que quelqu'un aurait une idée pour résoudre mon problème?
    Plutôt que d'appliquer int a une chaine qui peut être vide, la tester avant voire s'assurer qu'en plus elle ne contient que des nombres semble logique.

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

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par benja92 Voir le message
    J'espère que je poste mon topic au bon endroit.
    Exactement l'endroit où il fallait

    Citation Envoyé par benja92 Voir le message
    dans cet exemple je suis obligé de "condamner" l'utilisation du nombre -1 pour sortir de ma boucle.
    ...
    mon problème vient alors du fait que l'input du user n'est pas un integer et que donc le programme plante. et si j'enlève l'integer (que je ne convertis pas l'input) je ne peux plus utiliser ma liste pour y appliquer des opérations mathématiques par exemple.
    Tu as grosso-modo deux façons de résoudre le souci
    1. tu peux d'abord récupérer simplement l'input, sans tenter de le convertir en int. Donc tu obtiens une string que tu peux tester par rapport à un mot clef (ex "quit"). Et si la string n'est pas le mot clef, alors là tu la convertis en int
      Exemple
      Code python : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      while True:
          entree = input("entrez votre nombre: ")
          if entree == "quit":
              break
          liste.append(int(entree))
      # while
      Evidemment là on part du principe que la conversion en int est toujours faisable
    2. tu peux utiliser un try/except pour récupérer l'exception "la string n'est pas convertible en int" et dans ce cas, cela signifie que tu dois quitter. Ok cela fait appel à une notion de "gestion des exceptions" à laquelle tu n'es peut-être pas encore arrivé


    Citation Envoyé par benja92 Voir le message
    (par ailleurs, je pense, mais vous pourrez me le confirmer que la condition avec le "break" est sans doute redondante).
    Exact. Ce n'est pas la condition avec le break qui est redondante (il faut tester si tu sors ou pas), mais celle dans le while qui alors ne sert à rien. L'usage dans ce cas de figure est de partir sur une boucle infinie (while True).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Merci à tous les deux pour vos réponses.

    Plutôt que d'appliquer int a une chaine qui peut être vide, la tester avant voire s'assurer qu'en plus elle ne contient que des nombres semble logique.
    Tout à fait d'accord et j'implanterai ce genre de test pour des programmes plus avancés (et quand mes compétences seront plus développées également), mais je partais du principe que l'user ne commettrait pas d'erreur.


    tu peux d'abord récupérer simplement l'input, sans tenter de le convertir en int. Donc tu obtiens une string que tu peux tester par rapport à un mot clef (ex "quit"). Et si la string n'est pas le mot clef, alors là tu la convertis en int
    Aaaah magnifique, c'est exactement ca que je cherchais. effectivement convertir en int au moment d'append la liste est une excellente idée.*


    tu peux utiliser un try/except pour récupérer l'exception "la string n'est pas convertible en int" et dans ce cas, cela signifie que tu dois quitter. Ok cela fait appel à une notion de "gestion des exceptions" à laquelle tu n'es peut-être pas encore arrivé
    J'ai été exposé à ce concept (try/except) mais je ne l'ai encore jamais appliqué/utilisé. je vais essayer de le mettre en application progressivement, dans des exercices plus avancés.

    Exact. Ce n'est pas la condition avec le break qui est redondante (il faut tester si tu sors ou pas), mais celle dans le while qui alors ne sert à rien. L'usage dans ce cas de figure est de partir sur une boucle infinie (while True).
    Il me semble qu'avec la solution numéro 1, je peux entrer des strings. en conséquence je peux vérifier la condition soit dans l'initialisation de la boucle (par exemple: while entrée != ""), soit en son sein avec while True et le mot clé break. est ce que l'une des ces 2 méthodes est préférée/conseillée?

    Merci encore pour vos aides et solutions.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par benja92 Voir le message
    effectivement convertir en int au moment d'append la liste est une excellente idée
    Un des fondamentaux de la prog. Ne traiter les données que quand elles ont besoin d'être traitées et non 3 semaines avant au risque de traiter des données qui seront en réalité jetées.

    Citation Envoyé par benja92 Voir le message
    J'ai été exposé à ce concept (try/except) mais je ne l'ai encore jamais appliqué/utilisé. je vais essayer de le mettre en application progressivement, dans des exercices plus avancés.
    C'est souvent une solution plébiscitée en Python. On part du principe que l'action est faisable et on détecte le cas "elle n'a pas pu se faire". C'est souvent plus facile que tester la faisabilité et le faire (avec le risque que la faisabilité change entre le test et l'action si par exemple la faisabilité d'appuie sur un critère modifiable depuis l'extérieur et qu'on bosse en environnement multi-users)

    Citation Envoyé par benja92 Voir le message
    Il me semble qu'avec la solution numéro 1, je peux entrer des strings. en conséquence je peux vérifier la condition soit dans l'initialisation de la boucle (par exemple: while entrée != ""), soit en son sein avec while True et le mot clé break. est ce que l'une des ces 2 méthodes est préférée/conseillée?
    Si tu pars que sur un while entree != "", comment feras-tu ensuite, une fois l'input reçu de l'utilisateur, pour détecter que cet input est ou n'est pas à convertir en int ? Tu seras obligé de re-tester if entree == "" (accessoirement on préfère écrire if not entree).
    Donc entre la méthode "je ne fais qu'un test" et la méthode "je fais le même test deux fois"...

    PS: les accents dans les noms de variables c'est en général plutôt déconseillé.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Perso, moi qui n'aime pas les whiles (chutttt, on ne discute pas sur les goûts et les couleurs^^), je trouve les boucles for plus dans l'esprit de python.
    Et pour cela nous disposons de iter() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    liste_int = []
    for data in iter(input, ""):  #Pour sortir de la boucle appuyer sur la touche return sans faire de saisie
        try:
            liste_int.append(int(data))
        except:
            print("Erreur. Je veux des entiers !")
     
    print(liste_int)
    Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    10
    40
    FFF
    Erreur. Je veux des entiers !
    88
     
    [10, 40, 88]
    >>>
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Une autre manière de faire avec while

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    numbers = []
    while x := input("entrez votre nombre: "):
        if x.isdigit():
            numbers.append(x)
    print(numbers)
    Je présente la solution isdigit car ici on ne peut pas parler d'optimisation...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Une autre manière de faire avec while
    Merci. C'est décidé, j'ai upgradé mon système pour bénificier de python3.8 et de ses avancés...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Et pour cela nous disposons de iter()
    Joli coup !!! iter(input, ""). Je n'y aurais jamais pensé

    Citation Envoyé par fred1599 Voir le message
    Je présente la solution isdigit car ici on ne peut pas parler d'optimisation...
    Tu as surtout présenté le tout nouvel opérateur morse := auquel on n'est pas encore tous habitués

    C'est probablement une des plus grande difficultés de Python: trouver immédiatement, parmis la masse d'outils existants, celui qui pourra s'appliquer parfaitement à la problématique (nécessité de connaitre alors tous les outils offerts et de se maintenir à flot avec tous ceux qui sortent en permanence)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous,

    merci pour vos inputs et conseils respectifs.

    Un des fondamentaux de la prog. Ne traiter les données que quand elles ont besoin d'être traitées et non 3 semaines avant au risque de traiter des données qui seront en réalité jetées.
    Je vais essayer de me remémorer cela ^^

    Ok pour le try/except concept. je vais l'utiliser prochainement.

    Si tu pars que sur un while entree != "", comment feras-tu ensuite, une fois l'input reçu de l'utilisateur, pour détecter que cet input est ou n'est pas à convertir en int ? Tu seras obligé de re-tester if entree == "" (accessoirement on préfère écrire if not entree).
    Donc entre la méthode "je ne fais qu'un test" et la méthode "je fais le même test deux fois"...

    PS: les accents dans les noms de variables c'est en général plutôt déconseillé.
    Compris pour les accents,je les éliminerai de mes "programmes".
    Et en effet pour le commentaire sur le testing. D'où effectivement l'avantage du "True" dans la boucle while que je ne connaissais pas. merci.


    Perso, moi qui n'aime pas les whiles (chutttt, on ne discute pas sur les goûts et les couleurs^^), je trouve les boucles for plus dans l'esprit de python.
    Et pour cela nous disposons de iter() :
    Merci pour cette autre solution. Je ne connaissais pas cette "fonction" (méthode? je ne sais pas exactement comment l'appeler). ca peut etre intéressant mais je trouve la boucle while plus facile d'utilisation dans l'optique initiale.


    Une autre manière de faire avec while

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    numbers = []
    while x := input("entrez votre nombre: "):
        if x.isdigit():
            numbers.append(x)
    print(numbers)
    Je présente la solution isdigit car ici on ne peut pas parler d'optimisation...
    Merci, je ne connaissais pas non plus "isdigit". ca me sera très probablement utile.
    En revanche je ne comprends pas le signe ":=". J'ai lu quelque part que c'était du pseudo code mais je ne comprends pas exactement ce que ca veut dire et à quoi ca correspond.

    Merci encore pour vos commentaires.

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par benja92 Voir le message
    je ne connaissais pas cette "fonction" (méthode? je ne sais pas exactement comment l'appeler).
    C'est une fonction (elle n'est pas reliée à un objet particulier mais s'applique à tout). Tout comme print() ou input().

    Citation Envoyé par benja92 Voir le message
    je ne connaissais pas non plus "isdigit"
    Comme je l'ai dit dans mon post précédent, c'est la principale difficulté de Python: pouvoir tout connaitre. Et là, c'est une méthode (elle s'applique à un objet string qui est ici représenté par "x").

    Citation Envoyé par benja92 Voir le message
    En revanche je ne comprends pas le signe ":=". J'ai lu quelque part que c'était du pseudo code mais je ne comprends pas exactement ce que ca veut dire et à quoi ca correspond.
    Tout nouvel opérateur (version 3.8). On le nomme "morse" à cause de sa ressemblance avec les yeux et dents de l'animal. Il a pour but d'affecter la valeur à une variable mais aussi la renvoyer au développeur qui pourra alors la tester en même temps.
    Pour résumer, là où avant on écrivait
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x=expression()
    if x == valeur: action
    On écrira maintenant if x:=expression() == valeur: action.

    Je pense qu'il a été créé pour faire plaisir aux nostalgiques du C familiers du if ((x=expression()) == valeur) qu'ils écrivent habituellement pour simplifier leur code.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    C'est une fonction (elle n'est pas reliée à un objet particulier mais s'applique à tout). Tout comme print() ou input().
    d'accord, merci pour la précision.

    Comme je l'ai dit dans mon post précédent, c'est la principale difficulté de Python: pouvoir tout connaitre. Et là, c'est une méthode (elle s'applique à un objet string qui est ici représenté par "x").
    Oui je comprends et j'imagine que cette connaissance s'étoffera avec l'expérience ^^

    Tout nouvel opérateur (version 3.8). On le nomme "morse" à cause de sa ressemblance avec les yeux et dents de l'animal. Il a pour but d'affecter la valeur à une variable mais aussi la renvoyer au développeur qui pourra alors la tester en même temps.
    D'accord, je comprends mieux avec ton exemple. En revanche, je trouve que ca ne "raccourcit" pas tant que ca le code, et que ca ne le simplifie pas non plus (sans pour autant le complexifié). J'essayerai de l'utiliser progressivement au cas par cas.

    merci

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par benja92 Voir le message
    D'accord, je comprends mieux avec ton exemple. En revanche, je trouve que ca ne "raccourcit" pas tant que ca le code, et que ca ne le simplifie pas non plus (sans pour autant le complexifié).
    Ben pour mon exemple, on arrive à une ligne au lieu de deux. Et c'était juste un exemple "explicatif". Si on veut réécrire la boucle de fred1599 sans cet opérateur, cela donnera
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while True:
        x=input("entrez votre nombre: ")
        if not x: break
        if x.isdigit(): numbers.append(x)
    Avec cet opérateur
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while x:=input("entrez votre nombre: "):
        if x.isdigit(): numbers.append(x)
    Mais comme je l'ai dit, c'est une écriture assez habituelle quand on vient du C.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Si on veut réécrire la boucle de fred1599 sans cet opérateur, cela donnera
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while True:
        x=input("entrez votre nombre: ")
        if not x: break
        if x.isdigit(): numbers.append(x)
    Je dirais que le code le plus proche en terme d'algorithme serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    numbers = []
    x=input("entrez votre nombre: ")
    while x:
        if x.isdigit():
            numbers.append(x)
        x=input("entrez votre nombre: ")
    print(numbers)
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  15. #15
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    une autre manière de faire, consiste aussi à demander d'abord à l'utilisateur combien de nombre il souhaite saisir. Ensuite une fois qu'on a ce nombre adieu la boucle while et le critère de sortie qui peut paraitre déplaisant ou inesthétique, on fait un for, puisqu'on connait le nombre d'entrée !

  16. #16
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par lg_53 Voir le message
    une autre manière de faire
    Oui, mais dans le cas d'une saisie érronée, il va te manquer une saisie...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  17. #17
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Oui mais :

    Citation Envoyé par benja92 Voir le message
    je partais du principe que l'user ne commettrait pas d'erreur.
    Et après on pourrait quand même gérer les erreurs de saisie. Car gérer les erreurs de saisie, ou bien s'assurer qu'on a rentrer le bon nombre d'input sont 2 problemes indépendant.

    Suffirait de faire qqch comme ca (ca rejoins les autres réponses, mais on a pas à avoir un mot clé pour terminer la séquence de saisie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def get_user_int_input(msg=''):
        x=input(msg)
        while not x.isdigit():
             print("Vous devez saisir un chiffre, svp, recommencez.")
             x=input(msg)
        return int(x)
     
    n=get_user_int_input("Nombre d'entree ?")
    numbers = [ get_user_int_input() for i in range(n) ]

  18. #18
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Car gérer les erreurs de saisie, ou bien s'assurer qu'on a rentrer le bon nombre d'input sont 2 problemes indépendant.
    Oui, tu as entièrement raison

    Et puisque, j'ai affirmé que je n'aime pas les while^^:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def get_user_int_input(msg=''):
        x=input(msg)
        if x.isdigit():
            return int(x)
        else:
            print("Vous devez saisir un chiffre, svp, recommencez.")
            get_user_int_input()
     
    n=get_user_int_input("Nombre d'entree ?")
    numbers = [ get_user_int_input() for i in range(n) ]
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  19. #19
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    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
    def get_user_int_input(msg='', result=None, n=0):    
        if result is None:
            result = []
        if n == 0:
            return result
        x = input(msg)
        if x.isdigit():
            result.append(int(x))
            n -= 1
        else:
            print("Vous devez saisir un chiffre, svp, recommencez.")
        return get_user_int_input(msg=msg, result=result, n=n)
     
     
    numbers = get_user_int_input(msg="Valeur: ", n=5)  # 5 valeurs à entrer dans une liste initialisée vide
    print(numbers)
    ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  20. #20
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    --- Message effacé, j'ai raconté des bêtises ---

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2016] boucle pour liste sans doublon
    Par motivator dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/01/2020, 23h50
  2. Boucle en sql pour liste de résultats
    Par Lolitaaa dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/07/2009, 18h52
  3. Réponses: 3
    Dernier message: 07/05/2009, 10h28
  4. Réponses: 2
    Dernier message: 01/08/2005, 16h55
  5. Réponses: 8
    Dernier message: 08/05/2004, 13h58

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