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 :

IndexError: string index out of range


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Par défaut IndexError: string index out of range
    Bonjour à tous,

    Naturaliste amateur, j'ai eu besoin de cartographier et analyser quelques données et je me suis tourné vers Qgis qui m'a permis quelques réalisations carto. Dans un forum ad hoc, je trouve régulièrement des réponses à des questions d'analyse qui ne font pas référence à des extensions Qgis, mais à des scripts python auxquels je n'entends bien entendu strictement rien. Du coup je me suis dit : c'est quoi python, en dehors des Monty (que j'adore) et du serpent (que je n'ai pas vu souvent) ... ? Et quelle pourrait être son utilité dans mon domaine amateur (la carto naturaliste) ?

    Attention, je suis donc plus que novice en python ... et pour arranger le tout, je débute même carrément en programmation tout court ...

    Je lis actuellement avec profit (enfin je l'espère) "Apprendre à programmer avec python" de Gérard Swinnen et tente de réaliser certains des exercices proposés.

    Il y en a un pour lequel j'obtiens bien les réponses souhaitées mais qui me renvoie également un message d'erreur : il y a donc je pense une erreur (sic) dans le script, en tout cas mon travail n'est pas propre ... et ça fait bien deux heures que je recherche pourquoi ...

    J'espère n'être pas trop niais pour ce forum, être surtout dans le bon forum et que vous puissiez m'indiquer s'il y en a un autre de plus adapté à mon niveau.

    Ceci dit, voici le petit script en question qui me prend la tête :

    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
    #un script qui compte le nombre d’occurrences du caractère « e » dans une chaîne.
     
    ch='"Je suis envieux"'           # l'expression à analyser
    b=len(ch)                               # b est la longueur de mon expression (tout élément confondu)
    c=0                                         # c est mon compteur égrainant le nombre total d'éléments de ma chaîne pour effectuer ma recherche
    d=0                                         # d est mon compteur de "e" (= ma recherche)
    e='e'                                       # e est ma variable représentant les "e" dans mon expression
     
     
    print('la chaîne à étudier est',ch)
    print('le nombre d\'éléments dans cette chaîne est de',b)
     
    while c<b:
        while ch[c] !=e:
            c=c+1
            if c==(b-1) :
                print('le nombre de e dans cette expression est de',d)
        while ch[c]==e:
            c=c+1
            d=d+1
            if c==(b-1) :
                print('le nombre de e dans cette expression est de',d)




    et voici maintenant mon résultat et mon message d'erreur :

    la chaîne à étudier est "Je suis envieux"
    le nombre d’éléments dans cette chaîne est de 17
    le nombre de e dans cette expression est de 3
    Traceback (most recent call last):
    File "C:/Users/user/AppData/Local/Programs/Python/Python35-32/Scripts/chaine nombre de e.py",
    line 14, in <module>while ch[c] !=e:
    IndexError: string index out of range

    Y aurait-il une bonne âme qui puisse me dire où je me goure ?

    Si je comprends bien, c'est dû peut être à un dépassement de la valeur de c ... mais je ne sais qu'en tirer comme conclusion ...

    Et puis j'en suis venu à me poser une seconde question : est-ce bien normal d'avoir un if sans else à la suite ? ... bien que cela semble fonctionner ...

    Bon j'ai été un peu long, merci par avance pour votre passage et éventuellement vos réponses !

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Première réponse sans regarder ton programme : il ne faut pas hésiter à user et abuser des "print" :
    print(var), print(len(var)), print(type(var)), ...
    Si tu veux comprendre ce qui se passe.

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    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
    ch="Je suis envieux"           # l'expression à analyse
    b=len(ch)                               # b est la longueur de mon expression (tout élément confondu)
    c=0                                         # c est mon compteur égrainant le nombre total d'éléments de ma chaîne pour effectuer ma recherche
    d=0                                         # d est mon compteur de "e" (= ma recherche)
    e='e'                                       # e est ma variable représentant les "e" dans mon expression
     
     
    print('la chaîne à étudier est ',ch)
    print("le nombre d'éléments dans cette chaîne est de ",b)
     
    while c <= b:
        print(c)
        print(ch[c])
        c=c+1
    donne une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IndexError: string index out of range
    Mettons c < b pour voir ?

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Une petite modif pour aller plus loin :
    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
    ch="Je suis envieux"           # l'expression à analyse
    b=len(ch)                      # b est la longueur de mon expression (tout élément confondu)
    c=0                            # c est mon compteur égrainant le nombre total d'éléments de ma chaîne pour effectuer ma recherche
    d=0                            # d est mon compteur de "e" (= ma recherche)
    e='e'                          # e est ma variable représentant les "e" dans mon expression
     
     
    print('la chaîne à étudier est ',ch)
    print("le nombre d'éléments dans cette chaîne est de ",b)
     
    while c < b:
        print(c)
        print("lettre à la position", c, " : ", ch[c])
        if ch[c] == e:
            d = d + 1
            print("nbre de 'e' : ", d)
        c=c+1
     
    print("Nombre de 'e' dans la chaine : ", d)

  5. #5
    Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Par défaut
    Holàààà, ch'uis jaloux !!

    ça marche et surtout sans erreur !! J'avais bien essayé avec une condition if ... mais je n'arrivais pas à la rédiger ! Il me semblait qu'il lui fallait automatiquement une correspondance en else ...

    sinon, pour ta 1ère suggestion, c<b, cela ne changeait rien au message d'erreur ... j'avais moi même essayé auparavant.


    Bref, Grand Merci !!

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Bonjour,

    il y a aussi la solution de compter le nombre d’occurrence de chaque caractère et d'afficher celui que l'on veut à la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ch=u"Ceci est la chaîne à étudier durant l'été"  # l'expression à analyser en précisant qu'il s'agit d'unicode
    search_car=u"é"                         # le caractère dont on veut le nombre d'occurrences
    occurrences={}                          # le dico associant les caractères à leur nombre d'occurence
     
    for current_car in ch:
      occurrences[current_car] = occurrences.get(current_car, 0) + 1  # récupère le nombre d'occurrence du caractère courant ou 0 si aucune occurrence
     
    print(u"Nombre de '{}' dans la chaîne: {}".format(search_car, occurrences.get(search_car,0)))

Discussions similaires

  1. Tache cron IndexError: list index out of range
    Par rene2200 dans le forum Général Python
    Réponses: 3
    Dernier message: 20/11/2009, 14h02
  2. substring exception String index out of range: -1)
    Par tagada30 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 30/09/2008, 21h39
  3. IndexError: string index out of range
    Par nina08 dans le forum Général Python
    Réponses: 2
    Dernier message: 04/08/2008, 09h27
  4. String index out of range
    Par *alexandre* dans le forum Langage
    Réponses: 3
    Dernier message: 08/01/2008, 04h19
  5. probleme de relogin: String index out of range: 0
    Par bbany dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 07/09/2007, 17h04

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