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 :

TypeError: 'int' object is not subscriptable


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Par défaut TypeError: 'int' object is not subscriptable
    bonjour je veux comparer des performances.
    chaque performance est une séance de sport représenté par un chiffre.
    la performance est quand le deuxième chiffre est supérieur au premier.

    progrès([3,4,3,6,3,4]) => 3 séances sont plus performantes que la précédente
    3 séances sont plus performantes que la précédente

    je pense avoir trouvé l'algorithme qui est de comparé la ance présente à la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def progrès(temps):
        progress = 0
        i = 0
     
        for value in range(len(times)-1):
            if value[i] > value[i+1]:
                progress += 1
                i+= 1
            else:
                i+= 1
     
        return progress
    cependant j'ai le message d'erreur suivant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if value[i]> value[i+1]:
    TypeError: 'int' object is not subscriptable
    c'est une erreur de débutant mais je tourne en rond..

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Si times est une liste, range(len(times)-1) fabrique les indices successifs des éléments de cette liste.
    Donc, dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for value in range(len(times)-1):
            if value[i] > value[i+1]:
    "value" est bien un entier et ce serait plutôt ce qu'on attend comme i (index) pour parcourir times.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  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
    Essaie cela, tu vas comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def progres(temps):
        progress = 0
        i = 0
     
        for value in range(len(temps)-1):
            print(value, temps[value])
    #        if value[i] > value[i+1]:
    #            progress += 1
    #            i+= 1
    #        else:
    #            i+= 1
    print(progres([3,4,3,6,3,4]))

  4. #4
    Membre du Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Par défaut
    Merci beaucoup, j'en apprend beaucoup tous les jours grâce au forum !

    la dernière difficultée consistait à comparer la valeur n d'une liste à la valeur n+1
    j'ai l'impression qu'on est obligé de passer par la comparaison de deux listes.

    voici donc mon code final, qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def progrès(times):
        temps = times
        plusun = times[1:]
        progress = 0
     
        for value in range((len(temps)-1)):
            if plusun[value] > temps[value]:
                progress += 1
     
        return progress      
     
    progrès([3,4,3,6,3,4])
    retourne bien 3,
    Bonne soirée à tous

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 841
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par See Tenkay Voir le message
    la dernière difficultée consistait à comparer la valeur n d'une liste à la valeur n+1
    j'ai l'impression qu'on est obligé de passer par la comparaison de deux listes.
    Absolument pas, on est juste obligé de comparer la valeur n à la valeur n+1.

    Citation Envoyé par See Tenkay Voir le message
    voici donc mon code final, qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def progrès(times):
        temps = times
        plusun = times[1:]
        progress = 0
     
        for value in range((len(temps)-1)):
            if plusun[value] > temps[value]:
                progress += 1
     
        return progress      
     
    progrès([3,4,3,6,3,4])
    retourne bien 3,
    Déjà même si la copie "plusun" se serait justifiée, la copie de "times" dans "temps" elle ne se justifie absolument pas.

    Donc voici mon code qui fonctionne sans avoir besoin de recopier la liste avant de comparer ses éléments
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def progres(times):
    	res=0
    	for i in range(1, len(times)):
    		if times[i] > times[i-1]: res+=1
    	return res
     
    progres([3,4,3,6,3,4])

    retourne bien 3

    Après on peut utiliser les outils Python
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def progres(times):
    	return sum(times[i] > times[i-1] for i in range(1, len(times)))
     
    progres([3,4,3,6,3,4])

    retourne bien 3, et toujours bien évidemment sans avoir besoin de copier la liste initiale.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre du Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Par défaut
    je comprend,
    en relisant mes essais, la source de mon erreur était

    la tentative
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for value in range(0, (len(times)-1)):
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for value in range(1, len(times)):
    merci!

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par See Tenkay Voir le message
    en relisant mes essais, la source de mon erreur était

    la tentative
    for value in range(0, (len(times)-1)):
    au lieu de
    for value in range(1, len(times)):
    Les 2 fonctionnent: dans un cas on comparera la valeur à l'indice i avec celle à l'indice i+1, dans le 2nd ce sera i-1 et i.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    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
    Citation Envoyé par See Tenkay Voir le message
    je comprend,
    en relisant mes essais, la source de mon erreur était

    la tentative
    for value in range(0, (len(times)-1)):
    au lieu de
    for value in range(1, len(times)):

    merci!
    Il y avait plusieurs erreurs :
    - value[i] alors que value était déjà l'indice.
    - les deux variables times et temps

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

Discussions similaires

  1. [Python 2.X] TypeError: 'int' object is not iterable
    Par nmokht97 dans le forum Général Python
    Réponses: 5
    Dernier message: 11/06/2018, 17h40
  2. TypeError: 'int' object is not iterable
    Par lewiss66 dans le forum Général Python
    Réponses: 2
    Dernier message: 18/10/2012, 16h37
  3. "'int' object is not callable"
    Par dingoth dans le forum Général Python
    Réponses: 2
    Dernier message: 22/12/2010, 17h38
  4. TypeError: 'file' object is not callable
    Par MariemEA dans le forum Général Python
    Réponses: 7
    Dernier message: 09/07/2010, 21h57
  5. TypeError: 'int' object is not iterable
    Par manaliac dans le forum Général Python
    Réponses: 15
    Dernier message: 29/06/2010, 11h24

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