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 :

Problème avec un while if et else


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Par défaut Problème avec un while if et else
    Bonjour

    j'ai un array de plusieurs milliers de lignes.

    je souhaiterais parcourir ce tableau afin de trouver une ligne selon 4 critères.

    je pense qu'un while est la solution, premièrement faut il un for avant le while, il me semble que non.

    Ensuite, comment utiliser le if et le else, selon si la condition est vérifiée ou non?

    voilà mon début de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while a>=tab[i,1] and  a<tab[i,3] and b>=tab[i,2] and  b<tab[i,8] :
            if #conditions non trouvée : 
                ligne=[-1]*col
            else #conditions trouvée: 
    	    ligne=tab[i,:]
    print ligne
    merci d'avance pour les réponses

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Au choix:

    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
    from numpy import array
     
    tab = array([[245,12,34,36,455],[1654,23,5,230,100],[11,409,56,34,12]])
    lin,col = tab.shape
    print 'tab =\n',tab,'\n'
     
    a,b =34,23
    i = 0
    while i<lin:
        ln = tab[i,:]
        if a>=ln[1] and  a<ln[3] and b>=ln[2] and  b<ln[0] :
            print ln
        else:
            print [-1]*col
        i += 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from numpy import array
     
    tab = array([[245,12,34,36,455],[1654,23,5,230,100],[11,409,56,34,12]])
    lin,col = tab.shape
    print 'tab =\n',tab,'\n'
     
    a,b =34,23
    for i in xrange(lin):
        ln = tab[i,:]
        if a>=ln[1] and  a<ln[3] and b>=ln[2] and  b<ln[0] :
            print ln
        else:
            print [-1]*col
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from numpy import array
     
    tab = array([[245,12,34,36,455],[1654,23,5,230,100],[11,409,56,34,12]])
    lin,col = tab.shape
    print 'tab =\n',tab,'\n'
     
    a,b =34,23
    for ln in tab:
        if a>=ln[1] and  a<ln[3] and b>=ln[2] and  b<ln[0] :
            print ln
        else:
            print [-1]*col

    J'ai remplacé un 8 par un nombre plus petit pour ne pas avoir à construire un trop grand tableau.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Par défaut
    merci pour ces réponses mais aucune solution fonctionne, celà me renvoie que le résultats quand la condition n'est pas trouvée alors qu'il y a des solutions dans mon tableau

    résultat que des -1

    voilà un exemple d'une ligne de mon tableau
    pour a=62
    b=2
    le reésultat doit renvoyer cette ligne et non -1
    [ 211. 61.1 2. 67.95622 2. 67.92450
    2.25 61.1321 2.25 0.84600002 0.68400
    0.84100 0.84200 0.71600 0.83600 0.75999]]
    merci pour l'aide

  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Ce code est étrange, la condition du while porte sur la variable i.
    cette variable (non initialisée sur ce code) n'évolue pas dans la boucle.
    Je ne vois pas comment cela peut marcher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while a>=tab[i,1] and  a<tab[i,3] and b>=tab[i,2] and  b<tab[i,8] :
            if #conditions non trouvée : 
                ligne=[-1]*col
            else #conditions trouvée: 
    	    ligne=tab[i,:]
    print ligne
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Par défaut
    je pense qu'il y a à la fois un problème de syntaxe et de logique

    pour résumer je veux chercher une ligne dans un tableau selon 4 critères et la renvoyer comme réponse

    si je la trouve pas renvoyer une ligne de -1

    merci pour l'aide

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    pour résumer je veux...
    Ça ne sert a rien de résumer. On veut au contraire un maximum de renseignements pour répondre.

    Zavonen a bien raison:

    CE CODE est étrange, la condition du while porte sur la variable i.
    cette variable (non initialisée SUR CE CODE) n'évolue pas DANS LA BOUCLE.
    Je ne vois pas comment cela peut marcher.
    Sous-entendu, la boucle telle qu'elle est écrite dans CE CODE.

    Tu ne donnes pas un code compréhensible, en tous cas il est riquiqui, et tu penses que ça suffit pour qu’on sorte la solution du chapeau.





    Ton premier message:
    - j'ai un array ...
    - je souhaiterais ....
    - je pense que....
    - comment utiliser....
    À aucun endroit il n’est question d’un code que tu as fait tourner et de la difficulté rencontrée ou de l’erreur obtenue.

    Ton code du premier message, si tu as essayé de le faire tourner, tu as dû obtenir une boucle infinie. Tu n’as peut être pas compris que c’est ce qui se passait. Dans ces cas là, il faut potasser les tutoriels sur les boucles; ou se faire aider sur un forum en posant des questions correctement goupillées; ou aller faire de la peinture.....





    Une condition n’est pas «trouvée» ou «non trouvée»,

    elle est «vérifiée» ou «non vérifiée».







    Avec
    [ 211. 61.1 2. 67.95622 2. 67.92450 2.25 61.1321 2.25 0.84600002 0.68400
    0.84100 0.84200 0.71600 0.83600 0.75999]

    il n’y a aucune raison que les conditions ne soient pas vérifiées:
    sauf erreur on a bien
    62 >= 61.1
    62 < 67.95622
    2 >= 2.0
    2 < 2.25

    Notamment, 2 sans point est bien égal à 2.0 avec point.



    Et quand je fais tourner le code suivant (les lignes ont 11 éléments et non pas 16, ça n’a pas d’importance; j’ai remis la dernière condition avec un 8),

    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
    from numpy import array
     
    tab = array([[245, 23.08, 20.13, 9.09, 17, 12 ,34, 36, 455, 0.87, 0.3456],\
                 [ 211., 61.1, 2., 67.95622, 2., 67.92450, 2.25, 61.1321, 2.25, 0.84600002, 0.68400],\
                 [0.84100, 0.84200, 1.98, 0.71600, 0.83600, 0.75999, 11, 409, 56, 34, 12]])
    lin,col = tab.shape
    print 'tab =\n',tab,'\n'
     
    a,b = 62,2
     
    for ln in tab:
        if a>=ln[1] and  a<ln[3] and b>=ln[2] and  b<ln[8] :
            print ln
        else:
            print [-1]*col
    j’obtiens bien la sortie de la ligne désiree.

    tab =
    [[ 2.45000000e+02 2.30800000e+01 2.01300000e+01 9.09000000e+00
    1.70000000e+01 1.20000000e+01 3.40000000e+01 3.60000000e+01
    4.55000000e+02 8.70000000e-01 3.45600000e-01]
    [ 2.11000000e+02 6.11000000e+01 2.00000000e+00 6.79562200e+01
    2.00000000e+00 6.79245000e+01 2.25000000e+00 6.11321000e+01
    2.25000000e+00 8.46000020e-01 6.84000000e-01]
    [ 8.41000000e-01 8.42000000e-01 1.98000000e+00 7.16000000e-01
    8.36000000e-01 7.59990000e-01 1.10000000e+01 4.09000000e+02
    5.60000000e+01 3.40000000e+01 1.20000000e+01]]

    [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
    [ 211. 61.1 2. 67.95622 2. 67.9245
    2.25 61.1321 2.25 0.84600002 0.684 ]
    [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
    Maintenant si tu nous dis simplement «Ça marche pas ! » sans nous dire quel code tu utilises, on ne peut rien faire de plus.
    C’est comme si:
    - Docteur, j’ai mal.
    - Où ça ?
    - Ah , je dis pas ! Devinez.


    Donne un code et un copier-coller de ce que tu obtiens, stp.
    Je ne comprends pas qu'on ne pense pas de soi-même à le faire, après plus de 140 messages sur le forum.

    Ah mais c’est que je m’énerverais si je ne restais pas calme

Discussions similaires

  1. [FPDF] Problème avec un while dans un tableau
    Par nigg4z dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/10/2007, 15h13
  2. [MySQL] Problème avec un "while"
    Par fantasygirl dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/08/2007, 02h09
  3. Réponses: 2
    Dernier message: 17/10/2005, 22h16
  4. Problème avec Do while rs.EOF
    Par lauraned dans le forum ASP
    Réponses: 12
    Dernier message: 21/05/2004, 12h00

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