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 :

liste, index, petite erreur


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut liste, index, petite erreur
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # fonction qui renvoie le nom du énième mois de l'année
     
    def nom_mois(n):
        liste = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre']
        i=0
        while i < len(liste):
            if liste[i].index == x: 
                return liste[i+1]
            else:
                i=i+1
     
    x=int(input("indiquez un numéro de mois : "))
    print(nom_mois(x))
    Ça me retourne None.
    Je souhaite que si je rentre 2 ça me renvoie février.

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

    C'est parce que la condition liste[i].index == x n'est jamais vraie car liste[i].index n'est pas un entier.

    Après, il faut un peu réfléchir quand vous codez! Pourquoi utiliser x, variable globale, alors que la fonction reçoit cette valeur dans le paramètre n?
    Si le but de la fonction est de retourner liste[n] ou liste[n-1], pas la peine de faire une boucle...

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

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Matthieu_12 Voir le message
    Je souhaite que si je rentre 2 ça me renvoie février.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def nom_mois(n):
    	liste = ('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre')
    	return liste[n-1]


    Ensuite, une fois qu'on maitrise les accès aux listes et tuples par leur indice (généralement autour de la 5° page des tutos pour débutants), on peut utiliser des trucs python plus professionnels.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from datetime import date
    def nom_mois(n):
    	return date(1, n, 1).strftime("%B")
     
    import locale
    locale.setlocale(locale.LC_TIME, '')
    x=int(input("indiquez un numéro de mois : "))
    print(nom_mois(x).capitalize())
    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]

  4. #4
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est parce que la condition liste[i].index == x n'est jamais vraie car liste[i].index n'est pas un entier.
    Je pensais que l'indice d'un élément d'une liste était un entier.
    Citation Envoyé par wiztricks Voir le message
    Si le but de la fonction est de retourner liste[n] ou liste[n-1], pas la peine de faire une boucle...
    En effet. Du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def nom_mois(n):
        liste = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre']
        return liste[n-1]
     
    x=int(input("indiquez un numéro de mois : "))
    print(nom_mois(x))
    Ça fonctionne. Merci Sve@r.
    Citation Envoyé par Sve@r
    Ensuite, une fois qu'on maitrise les accès aux listes et tuples par leur indice (généralement autour de la 5° page des tutos pour débutants), on peut utiliser des trucs python plus professionnels.
    Sans nul doute, mais il se trouve que j'en suis à la 74ème page du Swinnen et que nous n'avons pas encore vu les "trucs python plus professionnels". Un peu de patience ?

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Matthieu_12 Voir le message
    Je pensais que l'indice d'un élément d'une liste était un entier.
    list.indice() renvoie effectivement un entier. Mais list.indice n'est pas un entier, c'est une fonction. Ce sont les parenthèses qui font l'appel.

    Citation Envoyé par Matthieu_12 Voir le message
    Sans nul doute, mais il se trouve que j'en suis à la 74ème page du Swinnen et que nous n'avons pas encore vu les "trucs python plus professionnels". Un peu de patience ?
    C'était de l'ironie face à ton code totalement absurde et inutilement complexe alors qu'il suffisait simplement de retourner le nième élément (quand on est à la 74° page du Swinnen, on devrait savoir manipuler les listes et les indices). J'ai donc voulu te donner un code plus complexe en retour mais qui, lui, fonctionne.
    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
    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,

    Citation Envoyé par Matthieu_12 Voir le message
    Je pensais que l'indice d'un élément d'une liste était un entier.
    ...
    Sans nul doute, mais il se trouve que j'en suis à la 74ème page du Swinnen et que nous n'avons pas encore vu les "trucs python plus professionnels". Un peu de patience ?
    Vous ne devez pas "penser" mais vérifier que les instructions que vous demandez d'exécuter à Python vont bien faire ce que vous attendez.

    C'est pas compliqué de lancer l'interpréteur et de taper:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> L = 1, 2, 3
    >>> L.index
    <built-in method index of tuple object at 0x000001F364D06F30>
    >>> L.index == 1
    False
    >>> L.index(1) == 0
    True
    >>> L.index(1) == 1
    False
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ensuite, une fois qu'on maitrise les accès aux listes et tuples par leur indice (généralement autour de la 5° page des tutos pour débutants), on peut utiliser des trucs python plus professionnels.
    J'ai été voir comment c'était fichu datetime.py histoire de voir si je pouvais pas faire encore mieux et paf voilà sur quoi je tombe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    _MONTHNAMES = [None, "Jan", "Feb", "Mar", "Apr", "May", "Jun",
                         "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
    _DAYNAMES = [None, "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
    Il est beau le monde de la programmation a expliqué qu'il faut commencé par 0 et pas par 1 !!! Obligé de mettre des None au début des listes d'un module élémentaire de Python... Pfff !

    Hum sinon très bizarre ce bout de code :
    locale.setlocale(locale.LC_TIME, '')Si tu mets 0 à la place de locale.LC_TIME, ça met en français, si tu mets un autre nombre ça met en anglais.
    Si tu fais un while c < 1000000 : c+=1 ... et que tu remplaces locale.LC_TIME par c ben ça affiche toujoursr en français.
    Pas comprendre encore ! Mais pas grave moi être habitué !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    c = 0
    while c< 1250:
    	locale.setlocale(None, '')
    	print(c,'-',date(1, 2, 1).strftime("%B"))
    	c+=1
    	time.sleep(0.5)
    Dernière modification par Invité ; 03/07/2020 à 00h08.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Il est beau le monde de la programmation a expliqué qu'il faut commencé par 0 et pas par 1 !!! Obligé de mettre des None au début des listes d'un module élémentaire de Python... Pfff !
    Hé oui. Personne n'a dit que commencer à 0 n'avait que des avantages et aucun inconvénient. C'est simplement "une" solution qui a été choisie (et perso je pense que c'est la moins pire des solutions). Choisie pour coller au mieux à la machine (N bits suffisent pour accéder à N cases mémoires). Mais évidemment cela entraine quand-même des désagréments qui sont généralement toujours les mêmes : représenter la chose pour un humain qui généralement, lui, commence naturellement à 1. Cela se traduit alors généralement par du -1 ou +1 selon le cas (cf mon premier code). Mais "-1" ou "+1" c'est une opération qui prend du temps (surtout si elle se trouve dans une boucle) et donc je comprends les codeurs de datetime.py qui ont préféré sacrifier un espace afin d'éviter cette opération. Ou dit autrement, un tableau commence à 0 mais comme le mois 0 n'existe pas, on y met None.

    Citation Envoyé par LeNarvalo Voir le message
    Hum sinon très bizarre ce bout de code :
    locale.setlocale(locale.LC_TIME, '')
    Oui moi non plus je ne pige pas. locale je ne maitrise pas. J'ai trouvé ce code sur un autre topic du forum Python.
    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]

Discussions similaires

  1. Erreur Python : list index out of range
    Par mmmppp dans le forum Général Python
    Réponses: 4
    Dernier message: 15/10/2011, 21h59
  2. petite erreur d'implémentation dans une liste simplement chaînée
    Par johnny3 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 26/10/2008, 16h57
  3. [socket]Erreur List Index Out Of Bound
    Par afrodje dans le forum C++Builder
    Réponses: 1
    Dernier message: 23/06/2008, 16h43
  4. Message d'erreur : Liste index out of bounds (-1)
    Par valer dans le forum Langage
    Réponses: 7
    Dernier message: 25/04/2008, 08h50
  5. Erreur List Index Out Of Bound
    Par Baxter67 dans le forum C++Builder
    Réponses: 29
    Dernier message: 21/04/2008, 10h39

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