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 :

AttributeError: 'module' object has no attribute [Python 2.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 55
    Points : 24
    Points
    24
    Par défaut AttributeError: 'module' object has no attribute
    Bonjour,
    Je suis quasi-débutant en ce qui concerne la pratique de python et je suis confronté à un message d'erreur que je n'arrive pas à résoudre.
    Voici le code en question:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import numpy as np
    import matplotlib.pyplot as plt
     
    from math import *
     
    R=10    # R en Ohm
    L=0.2    # L en H
    C=1E-6   # C en F
    U0=20000     # Uc(t=0) en V
    I0=0       # I(t=0) en A
    Omega0=1/sqrt(L*C)
    print 'Omega0=',Omega0
    lambd=R/(2*L)
    print 'lambda=',lambd
    alpha=lambd/Omega0
    print 'alpha=',alpha
    Q=1/(2*alpha)
    print 'Q=',Q
    Delta_prime=lambd**2-Omega0**2
    print 'Delta_prime=',Delta_prime
     
    x = np.linspace(0, 2.48E-2, 249)
    print(x)
    def uc(x) :
        if Delta_prime < 0:
            return U0 * ( cos ( Omega0 * x) + lambd /Omega0 * sin ( Omega0 * x) ) * exp ( -lambd * x )
        else:
            return 0
    print 'Uc(2E-4)=',uc(2E-4)
    print 'Uc(2E-2)=',uc(2E-2)
     
    y  =  np.uc(x)
    #y=np.cos(x)
    print(y)
    plt.plot(x,y)
    plt.show()
    Pour info: il s'agit d'un début de résolution des équations concernant la décharge d'un condensateur dans un circuit RLC.

    L'exécution me conduit au message d'erreur:
    "AttributeError: 'module' object has no attribute 'uc' "

    Paradoxalement, si je change la ligne 32 "y = np.uc(x)" par "y=np.cos(x)":
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import numpy as np
    import matplotlib.pyplot as plt
     
    from math import *
     
    R=10    # R en Ohm
    L=0.2    # L en H
    C=1E-6   # C en F
    U0=20000     # Uc(t=0) en V
    I0=0       # I(t=0) en A
    Omega0=1/sqrt(L*C)
    print 'Omega0=',Omega0
    lambd=R/(2*L)
    print 'lambda=',lambd
    alpha=lambd/Omega0
    print 'alpha=',alpha
    Q=1/(2*alpha)
    print 'Q=',Q
    Delta_prime=lambd**2-Omega0**2
    print 'Delta_prime=',Delta_prime
     
    x = np.linspace(0, 2.48E-2, 249)
    print(x)
    def uc(x) :
        if Delta_prime < 0:
            return U0 * ( cos ( Omega0 * x) + lambd /Omega0 * sin ( Omega0 * x) ) * exp ( -lambd * x )
        else:
            return 0
    print 'Uc(2E-4)=',uc(2E-4)
    print 'Uc(2E-2)=',uc(2E-2)
     
    #y  =  np.uc(x)
    y=np.cos(x)
    print(y)
    plt.plot(x,y)
    plt.show()
    ... il n'y a plus d'erreur et une courbe est tracée....

    Je vous remercie de m'aider à comprendre et à corriger mon erreur dans le programme initial.

    Je travaille sous Python 2.7.3 (Windows 32 b).

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    uc est une fonction de ton programme, lorsque tu fais np.uc(x) python va chercher uc dans numpy ... et revient bredouille.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    Merci Vincent pour ta réponse et ton explication,

    Effectivement uc n'est pas dans numpy.
    Alors, que dois je faire pour utiliser uc, comme si cette fonction était dans numpy, comme pour la fonction cos ?
    Je cherche simplement à afficher le graphe de la fonction uc !

    Merci pour ta réponse

    Thierry

  4. #4
    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,

    Il faut essayer de comprendre ce que vous faites.
    np.cos accepte un tableau en paramètre et va retourner le tableau des valeurs correspondantes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> x = np.linspace(1, 10, 10)
    >>> np.cos(x)
    array([ 0.54030231, -0.41614684, -0.9899925 , -0.65364362,  0.28366219,
            0.96017029,  0.75390225, -0.14550003, -0.91113026, -0.83907153])
    Si on écrit une fonction "normale" genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def f(a):
    ...     if a > 5:
    ...        return 0
    ...     return 5
    ...
    et qu'on lui passe un tableau, çà fera ce que çà peut, ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> f(x)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in f
    ValueError: The truth value of an array with more than one element is ambiguous.
     Use a.any() or a.all()
    Pour pouvoir lui passer un tableau (i.e. un vecteur), il faut "vectoriser" la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> v = np.vectorize(f)
    >>> v(x)
    array([5, 5, 5, 5, 5, 0, 0, 0, 0, 0])
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    Merci W pour ta réponse très intéressante,

    En fait, j'avais trouvé "expérimentalement" une solution à mon problème:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    import numpy as np
    import matplotlib.pyplot as plt
     
    from math import *
     
    R=10    # R en Ohm
    L=0.2    # L en H
    C=1E-6   # C en F
    U0=20000     # Uc(t=0) en V
    I0=0       # I(t=0) en A
    Omega0=1/sqrt(L*C)
    print 'Omega0=',Omega0
    lambd=R/(2*L)
    print 'lambda=',lambd
    alpha=lambd/Omega0
    print 'alpha=',alpha
    Q=1/(2*alpha)
    print 'Q=',Q
    Delta_prime=lambd**2-Omega0**2
    print 'Delta_prime=',Delta_prime
     
    def uc (x):
    #    return U0 * ( cos ( Omega0 * x) + lambd /Omega0 * sin ( Omega0 * x) ) * exp ( -lambd * x )
        return U0 * ( np.cos ( Omega0 * x) + lambd /Omega0 * np.sin ( Omega0 * x) ) *np.exp ( -lambd * x )
    x = np.linspace(0, 2.48E-2, 249)
    print(x)
    y = uc (x)
    plt.plot(x,y)
    plt.show()
    Thierry

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2016, 20h34
  2. Réponses: 3
    Dernier message: 04/03/2014, 22h41
  3. AttributeError: 'module' object has no attribute 'ipv4_cksum
    Par comtention dans le forum Général Python
    Réponses: 6
    Dernier message: 05/10/2012, 18h09
  4. Selenium - AttributeError: 'module' object has no attribute
    Par bender1979 dans le forum Général Python
    Réponses: 4
    Dernier message: 09/11/2010, 22h03

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