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: list assignment index out of range" et "SyntaxError: 'return' outside function"


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 3
    Points
    3
    Par défaut "IndexError: list assignment index out of range" et "SyntaxError: 'return' outside function"
    Bonjour, je suis étudiant et débutant en python, j'essaie de m'entraîner de mon côté.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
    'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']
    t3 = []*24
    for i in range (0, 11): 
        t3[2*i] = t1[i]
        t3[2*i+1] = t2[i]
    return t3
    print(t3)

    je suis censé créer une nouvelle liste t3 qui doit contenir tous les éléments des deux listes t1 et t2 en les alternant, de telle manière que chaque nom de mois soit suivi du nombre de jours correspondant : ['Janvier',31,'Février',28,'Mars',31, etc...]. Cependant deux messages d'erreur s'affichent :
    - le premier est pour t3[2*i] = t1[i] qui dit IndexError: list assignment index out of range,
    - le deuxième est pour return t3 qui dit SyntaxError: 'return' outside function.
    Si l'un d'entre vous sait pourquoi, je suis preneur

  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,

    Citation Envoyé par MonsieurCharles Voir le message
    - le premier est pour " t3[2*i] = t1[i] " qui dit " IndexError: list assignment index out of range "
    - le deuxième est pour " return t3 " qui dit " SyntaxError: 'return' outside function "
    Le deuxième message est simple à comprendre: pas de return à l’extérieur d'une fonction.
    C'est comme çà. La vraie question est de savoir ce que vous essayez de faire avec ce "return" posé là.

    Pour le premier, il faut apprendre à vérifier que t3, t1 et i sont ce que vous pensez. Pour çà vous pouvez utiliser la commande "print". Vous essayez de comprendre et de corriger.

    note: vous familiariser avec les messages d'erreurs et à relire votre code pour le mettre au point c'est aussi çà apprendre à programmer.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ha oui vu que j'étudie les fonctions en ce moment j'ai mis un return par réflexe et pour le premier message d'erreur c'est le "t3=[]*24" qui posait problème j'ai donc rajouté un 0 à l'intérieur des crochets et ça fonctionne, mais il me semblait que cette syntaxe (sans le 0 à l'intérieur des crochets marchait)
    Merci beaucoup en tout cas

  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
    Citation Envoyé par MonsieurCharles Voir le message
    mais il me semblait que cette syntaxe (sans le 0 à l'intérieur des crochets marchait
    24 fois une liste vide fait toujours une liste vide.
    Par contre 24 fois l'objet 0, çà fait 24 objets identiques.

    Pas si grave lorsque ce sont des entiers mais piégeux lorsque ce sera des listes.

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

  5. #5
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Quelques remarques:
    Avec for i in range(0, 11) tu n'auras pas 12 itérations mais 11 (i ne prendra pas comme valeur 11)
    for i in range(0, 11): est équivalent à for i in range(11):

    Pourquoi ne pas simplement faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
    'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']
    t3 = []
    for i in range(12): 
        t3.append(t2[i])
        t3.append(t1[i])
    print(t3)
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  6. #6
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut Petit point sur les dates, et les années bissextiles surtout.
    Je vais un petit peu m'écarter du sujet principal pour me pencher d'avantage sur les dates, notamment février.
    Chaque année il est clair que janvier aura toujours 31 jours, mais février non... Donc votre bout de code ne fonctionnera pas pour toutes les années.

    Soit vous n'avez pas envie de passer par un module et ce type de solutions s'appliqueraient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # Python program to find the number of days in a given month
     
    month = int(input())
    year = int(input())
    if(month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12):
        print(“Number of days is 31)
        elif((month == 2) and (year%4 == 0) or ((year%100 == 0) and (year%400 == 0))):
            print(“Number of days is 29)
            elif(month == 2):
                print(“Number of days is 28)
                else:
    	print(“Number of days is 30)
    source

    Autrement le module calendar via sa fonction monthrange vous donnera le nombre de jours correspondant au mois voulu selon l'année.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> import calendar
    >>> calendar.monthrange(2002,1)
    (1, 31)
    >>> calendar.monthrange(2008,2)
    (4, 29)
    >>> calendar.monthrange(2100,2)
    (0, 28)
    source

Discussions similaires

  1. [Python 3.X] Message d'erreur: IndexError: list assignment index out of range
    Par JC JC dans le forum Général Python
    Réponses: 2
    Dernier message: 30/09/2019, 15h13
  2. [Python 3.X] fichier csv IndexError: list index out of range
    Par toto17 dans le forum Général Python
    Réponses: 8
    Dernier message: 16/12/2018, 22h20
  3. IndexError: List index out of range
    Par SmoZy dans le forum Général Python
    Réponses: 1
    Dernier message: 11/01/2018, 20h54
  4. IndexError: list index out of range
    Par Ouled dans le forum Général Python
    Réponses: 2
    Dernier message: 25/05/2017, 18h58
  5. 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

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