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

  1. #1
    Candidat au Club
    "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
    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
    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
    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 régulier
    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)

  6. #6
    Membre régulier
    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