Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

TypeError: unsupported operand type(s) for *: 'function' and 'function'

+1 vote

def progbarrepleine():

Données demandées

x = input ("Saisissez une valeur x en m :") # valeur de x en m (cf figure)
y = input ("Saisissez une valeur y en m :") # valeur de y en m (cf figure)
z = input ("Saisissez une valeur z en m :") # valeur de z en m (cf figure)

def para_vol(x,y,z):         # Calcul du volume d'une barre pleine
    print ("Volume = ", float(x) * float(y) * float(z), "m3")

m = mvol*para_vol   # Calcul de la masse
return (m)
print ("Masse =", round (m,3), "kg")

Calcul, en son centre de gravité, de la matrice d'inertie d'une barre pleine

Ixx = m*(y**2+z**2)/12
Iyy = m*(x**2+z**2)/12
Izz = m*(x**2+y**2)/12
Pxy = 0
Pxz = 0
Pyz = 0

def para_mat(mvol,x,y,z):
    m = mvol*para_vol       # Attention, cette fonction renvoie une matrice
                            # valable dans une base de 3 vecteurs unitaires
                            # dont le premier correpond à la direction de la barre
    return np.array([[Ixx,-Pxy,-Pxz],[-Pxy,Iyy,-Pyz],[-Pxz,-Pyz,Izz]])
mat_inertie = np.array([[Ixx,-Pxy,-Pxz],[-Pxy,Iyy,-Pyz],[-Pxz,-Pyz,Izz]])
print (mat_inertie)

quel peut etre le probleme ; je ne comprends pas ...

demandé 12-Jun-2016 par segolsed (114 points)

Pour assurer une meilleure compréhension du problème, il est conseillé d'inclure la stacktrace complète, pas seulement l'erreur levée dans le titre.

De même, plutôt que deux codes dont l'usage n'est pas expliqué, il vaudrait mieux fournir un exemple minimal montrant le problème.

Fournit la stack trace et les numéros de lignes, sinon on va pas s'en sortir.

3 Réponses

0 votes

Quand tu as un problème de ce genre commence par identifier la ligne problématique (ça vient avec le message d'erreur).
Ensuite quand tu crée une fonction il faut l'appeler avec des parenthèses derrière sans espace. S'il y a des arguments demandés il faut qu'ils soient inclus.
def youpi():
print('youpi')

youpi()

J'ai pas testé le code de toute façon il n'a pas l'air complet.

répondu 12-Jun-2016 par cestmoilerror (148 points)
0 votes

En l'absence de stacktrace, il est difficile de définir précisément le problème.

Néanmoins, à la lecture du code, il apparaît que, comme indiqué par l'exception levée, une fonction est multipliée avec une variable non définie :

def para_mat(mvol,x,y,z):
    m = mvol*para_vol

Si mvol est une fonction, alors l'exception affichée dans le titre de cette question vient peut-être de cette ligne.

Une solution pour cela est de ne pas multiplier les fonctions, mais leurs résultats respectifs :

def para_mat(mvol,x,y,z):
    m = mvol() * para_vol()

Selon la définition des fonctions, il sera peut-être nécessaire d'inclure des arguments à leur appel.

Lien vers un tutoriel sur les fonctions.

répondu 13-Jun-2016 par lucas (2,204 points)
+1 vote

dans ton code

def para_mat(mvol,x,y,z):
    m = mvol*para_vol

Tu multiplies mvol par para_vol qui est une fonction, mais tu ne lui passe pas de paramètres, donc tu essayes de multiplier par une fonction et pas par le résultat de la fonction.

Tu voulais probablement faire

def para_mat(mvol,x,y,z):
    m = mvol*para_vol(x, y, z)
répondu 18-Jun-2016 par benjamin (374 points)
...