Message d'erreur sur Spyder(Python)
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Message d'erreur sur Spyder(Python)



  1. #1
    Redne

    Message d'erreur sur Spyder(Python)


    ------

    Bonjour
    Je me présente brièvement : élève d'une cpge, section mpsi.
    Je suis censé résoudre numériquement une équation différentielle du second ordre. Le problème est que spyder ne veut pas m'afficher la courbe... A la place il m'affiche ce message d'erreur : UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 61: ordinal not in range(128)
    J'ai lu des discussions où le problème était similaire sans rien y comprendre, c'est pourquoi je vous prie de bien vouloir m'aider. Merci d'avance.

    Le code :
    Code:
    import matplotlib.pyplot as plt
    import numpy as np
    
    	
    g=9.81
    l=0.5
    N=1000
    a=0
    b=5
    h=(b-a)/N
    T=np.linspace(a,b,N+1)
    
    ang=np.zeros(N+1)
    vitang=np.zeros(N+1)
    
    
    ang[0]=5*np.pi/180
    vitang[0]=0
    
    for i in range(1,N+1):
        ang[i]=ang[i-1]+h*vitang[i-1]
        vitang[i] = vitang[i-1] - h*(g/l)*np.sin(ang[i-1])
    
    	
    ang[i]=ang[i-1]+h*vitang[i-1]
    
    plt.plot(T,ang,'k',linestyle='dashed',label='solution approchée')
    
      
    plt.plot(T,ang,'k',linestyle='dashed',label='solution approchée')
    
    
    ang_test = ang[0]*np.cos(np.sqrt(g/l)*T)
    
    plt.plot(T,ang,'gray',linestyle="dashed")
    plt.plot(T,ang_test,'black','k')
    plt.title("Oscillations du pendule simple")
    plt.xlabel("T en secondes")
    plt.ylabel("Theta en degrés")
    plt.axehline(color='k')
    plt.axis([0,5,-0.1,0.1])
    plt.show()

    -----
    Dernière modification par JPL ; 10/02/2017 à 23h03. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    satinas

    Re : Message d'erreur sur Spyder(Python)

    Bonjour,
    si tu es en Python 2 et ton texte en encodage UTF-8, ajoute les 2 lignes suivantes en début du fichier
    #-*- coding: utf-8 -*-
    from __future__ import unicode_literals

  3. #3
    Redne

    Re : Message d'erreur sur Spyder(Python)

    Bonsoir
    Merci de m'avoir répondu. Je suis en Python 2.7. j'ai fait ce que vous m'avez demandé et un nouveau message d'erreur s'affiche (l'ancien a disparu) :
    ValueError: could not convert string to float: k

  4. #4
    Redne

    Re : Message d'erreur sur Spyder(Python)

    Re
    J'ai tout simplement supprimé le k et ça a marché.

  5. A voir en vidéo sur Futura
  6. #5
    Redne

    Re : Message d'erreur sur Spyder(Python)

    Je viens de me rappeler d'une chose. J'ai déjà écrit un programme sans #-*- coding: utf-8 -*-
    from __future__ import unicode_literals et pourtant Python m'afficha la courbe. Donc où est le problème?

  7. #6
    satinas

    Re : Message d'erreur sur Spyder(Python)

    Bonjour, je n'avais pas vu le dernier post ...

    L'encodage c'est le format du texte lorsqu'il est stocké sur le disque. On peut le choisir dans l'éditeur de texte, chaque système d'exploitation en a un par défaut.
    Il y a l'encodage ascii de 128 caractères, le plus simple car ce sont nos lettres non accentuées.
    Ensuite on a créé des encodages étendus de 256 caractères pour ajouter les accents et autres. Mais il y en a plusieurs et cela crée des problèmes car impossible lorsqu'on charge un fichier texte, de savoir quel codage a été utilisé pour le stocker.
    On a donc créé ensuite les caractères Unicode qui regroupent tous les caractères de toutes les langues, et l'encodage UTF-8 pour les stocker. L'UTF-8 peut stocker un caractère sur plusieurs octets.

    Python 2 n'accepte par défaut que l'ascii, donc dès qu'il y a un caractère accentué, il faut spécifier l'encodage du fichier chargé :
    # -*- coding: latin1 -*- si c'est un encodage étendu
    # -*- coding: utf-8 -*- si c'est un encodage UTF-8

    Python 3 n'accepte par défaut que l'UTF-8. Avec un texte sans caractère accentué ou s'il a été encodé en UTF-8, pas de problème.
    # -*- coding:latin1 -*- si c'est un encodage étendu

    Ce n'est pas fini car si en Python 3 les chaînes sont chargées d'office en Unicode, en Python 2 ce n'est pas le cas, il faut lui dire en ajoutant :
    from __future__ import unicode_literals

Discussions similaires

  1. Erreur Python
    Par kimsama dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 14/12/2016, 16h38
  2. programmation sur spyder
    Par celiaa dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 07/03/2014, 23h00
  3. Réponses: 3
    Dernier message: 28/04/2013, 13h20
  4. [Blanc] Message d'erreur sur AEG
    Par cerambyz dans le forum Dépannage
    Réponses: 0
    Dernier message: 18/09/2007, 20h41
  5. SpYder de Freescale, qu'en pense Thm ?
    Par Gérard dans le forum Électronique
    Réponses: 10
    Dernier message: 25/02/2007, 00h24