Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur incompréhensible après recherche

Sujet résolu
    14 janvier 2018 à 10:48:57

    Bonjour, je faisais tranquillement un petit programme en python à propos de l’équation d'état des gaz réels de Van der Waals (on s'amuse comme on peut) quand celui-ci m'a retourné une erreur "'float' object is not callable" qui si je me souviens bien fait référence au fait qu'il manque des signes d'opérations (et que donc python interprète une variable comme une fonction, et que ça fout le bordel). Sauf que je ne vois pas où est cette erreur !

    from math import *
    import scipy.optimize
    
    a=0.3637
    b=4.267*10**(-5)
    n=41.284
    R=8.314
    T=293
    P=[]
    V=[]
    
    def listeP():    
        for i in range(9):        
            P.append(10**5+i*10**5)
        return P
    
    def f(P,V):
        return((P+a*(n**2/V**2))*(V-b*n)-R*T*n)
    
    def dichotomie(f,P,epsilon,x,y):
        f=x
        g=y
        for i in range(len(P)):
            x=f
            y=g
            while abs(y-x)>epsilon :
                z=(x+y)/2
                if (f(P[i],z)*f(P[i],x))<0:
                    y=z
                else:
                    x=z
            V.append((x+y)/2)
        return V
    
    print(dichotomie(f,listeP(),10**(-3),10**(-10),10**10))

    Selon python, l'erreur se trouve à la ligne 28 : 

    if (f(P[i],z)*f(P[i],x))<0:

    Mais je n'arrive pas à savoir comment faire !

    Merci pour vos réponses !


    • Partager sur Facebook
    • Partager sur Twitter
      14 janvier 2018 à 10:55:03

      Dans dichotomie tu as une variable qui porte le nom f (l. 21). C'est ça qui pose problème puisque tu as aussi une fonction qui s'appelle f. Python essaie d'appeler la variable avec des arguments alors que ce n'est pas possible ... Change le nom de ta fonction où de ta variable et ça marchera

      -
      Edité par Nephthys 14 janvier 2018 à 10:56:24

      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2018 à 10:57:28

        Salut,

        C'est très simple comme erreur.

        Vous avez deux objets avec le même nom f ..

        • Vous avez une fonction du nom de f (Ligne #17)
        • Vous avez une variable du nom de f=x (Ligne #21)

        Donc, lorsque vous donnez comme référence f=x, f devient un float, donc il n'est plus une fonction.

        Pourtant, ensuite, vous essayez d'exécuter cette fonction avec:

        (f(P[i],z)*f(P[i],x))

        Ce qui donne une erreur, puisque f est rendu un float ...

        PS: Oups j'avais pas vue, quelqu'un m'a devancé :) +1 pour Nephthys :) :)

        Bonne chance

        A+



        -
        Edité par nolimitech 14 janvier 2018 à 10:58:34

        • Partager sur Facebook
        • Partager sur Twitter

        Erreur incompréhensible après recherche

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown