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

wxPython Discussion :

Petit problème dans une fonction


Sujet :

wxPython

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Petit problème dans une fonction
    Bonjour à tous,

    J'ai le message d'erreur suivant qui apparait lorsque j'exécute mon code:
    The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    .

    Ceci apparait au moment où je lance un if dans une fonction de fonction. C'est à dire ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #Début de code...
    def Mafonction1():
        def Mafonction2():
            if #...test:
                ...
            else:
                ...
    Les puristes vont certainement me dire qu'il ne faut pas mettre une fonction dans une fonction, mais pour le moment c'est le seul moyen que j'ai trouvé pour faire ce que je souhaite.
    (Un clic sur un wx.Button lance Mafocntion1 qui consiste à tracer une courbe selon une équation assez complexe détaillée dans Mafonction2).

    Pour résoudre ce problème il faut à priori utiliser a.any() or a.all(). Le souci c'est que je ne sais pas comment...

    Merci pour votre aide.
    Tchao

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    tel que je comprends le message d'erreur tu dois avoir un tableau a contenant plusieurs éléments et tu fais un test du genre:


    je pense que Python attend plutôt un test du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if a[1] == True:
        pass
    en effet, si certains éléments de ton tableau a sont False alors que d'autres sont True, Python ne peut pas trancher.

    je ne pense pas que le fait que les fonctions soient imbriquées ait un rapport avec le message d'erreur que tu signales.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Effectivement cela doit être ça.

    Cependant il faut absolument que je puisse faire le test sur l'ensemble du tableau. Peux-tu me dire comment faire, car j'ai peur que la solution que tu me donnes me permette de ne faire le test que sur une partie.

    En faite mon code ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if a > 100:
        b = a*100
        return b
    else:
        b = a*50
        return b
    où a est calculé en fonction d'une vitesse d'un fluide dans un tuyau.

    En fonction des cas, b aura donc différentes valeurs.
    Ces valeurs seront ensuite utilisées dans une opération assez complexe.

    D'avance merci.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    je peux te proposer ça par exemple:

    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
    def cond(a):
        result=True
        for i in a:
            if i<= 100:
                result=False
                break
        return result
     
    def func(a):
        b=[]
        c=cond(a)
        for i in a:
            if c:
                b.append(i*100)
            else:
                b.append(i*50)
        return b
     
    a=[200,200,120]
    b=func(a)
    print b
    je suis sur Python 2.4 et il semblerait que sur Python 2.5 il y ait 2 nouveaux constructeurs all et any qui pourrait faire ça mieux mais je ne peux pas tester sur ma version.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    A priori et vu le message d'erreur que j'ai il faut que j'utilise l'un de ces constructeurs, mais je ne sais pas trop comment faire.
    Je vais essayer ta soluce et verrai le reste ensuite.

    Merci

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 78
    Points
    78
    Par défaut
    tab=[True,True]
    all(tab)
    ->True

    tab=[True,False]
    all(tab)
    ->False

    Donc si ton tableau ne contient que des True, all() te renverra True

    J'ai répondu mais je pense que ta déjà trouver par toi-même

  7. #7
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    J'avais effectivement trouvé comment utiliser all() (ou même any()).
    Il faut maintenant que je trouve le moyen de l'utiliser dans mon code, car ce dernier est tout de même un peu plus compliqué que celui que j'ai donné en exemple.

    Bonne soirée et merci

Discussions similaires

  1. probléme dans une fonction qui retourne un data reader
    Par saraenim dans le forum Windows Forms
    Réponses: 32
    Dernier message: 28/04/2008, 21h53
  2. Problème dans une fonction PL/SQL
    Par jnayna86 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/04/2008, 13h28
  3. Petit Problème dans une GTK-Table
    Par simtim dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 16/04/2007, 11h41
  4. Problème dans une fonction
    Par onefootstep dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/11/2006, 09h46
  5. [Debutant] Problème dans une fonction
    Par haludo dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2006, 09h25

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