Dans ce prog. tout bète
Résolu/Fermémamiemando Messages postés 33352 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 novembre 2024 - 25 août 2023 à 16:11
- Dans ce prog. tout bète
- Pense bete - Guide
- Pense bête windows - Accueil - Applications & Logiciels
- Bete d'orage dans ecran ✓ - Forum Matériel & Système
- Robot prog - Télécharger - Édition & Programmation
- Bétes d'orage dans mon écran - Forum MacOS
3 réponses
Modifié le 25 août 2023 à 16:00
Bonjour,
Tu souhaites probablement écrire ceci :
A = [1] for i in range (1, 11): A.append((A[i - 1] + 1) * 2) print(A)
Merci pour cette réponse. Effectivement ça fonctionne avec range(1,11).
mais je ne comprends pas pourquoi ça ne fonctionne pas si je calcule A[i] d'abord puis l'ajoute dans le tableau A.
21 août 2023 à 22:20
Le append ajoute un élément au tableau.
Avant le append, A[i] n'est pas dans le tableau, et tu ne peux donc pas faire appel à A[i] sans dépasser la taille du tableau.
"list assignment index out of range" t'indique que i est hors des dimensions du tableau.
25 août 2023 à 16:11
Bonjour,
Je me permets à toute fins utiles de préciser les différentes réponses qui ont déjà été données.
Si on reprend le code initial, au premier tour de boucle, lorsqu'on remplace i par sa valeur (i=1) on obtient :
A[1] = (A[0] + 1) * 2
A[0] est bien défini (donc le membre droit de l'affectation est bien défini), mais pas A[1], car à ce stade, le tableau A ne contient qu'un élément (l'élément A[0], initialisé à 1 par la première ligne du programme). A[1] n'est donc pas défini, d'où l'erreur.
C'est pourquoi la méthode append est ici indiquée : elle concatène à la suite d'un tableau un nouvel élément. Tu peux donc écrire :
A = [1] for i in range(1, 11): a_i =(A[i - 1] + 1) * 2 A.append(a_i) # Après cette instruction A[i] est bien défini, avant non print(A)
Une autre stratégie, si tu connais par avance la taille finale de A, serait de créer une liste de la bonne taille (donc dans le cas présent, de taille 11), quitte à la remplir avec des valeurs par défaut (typiquement None en python), comme le propose Jee Pee (#3), mais ça complexifie le code.
A = [None] * 11 A[0] = 1 for i in range (1, 11): A[i] =(A[i - 1] + 1) * 2 print(A)
Bonne chance
Modifié le 25 août 2023 à 16:02
Bonjour,
A = [1] # Crée une une liste avec la valeur 1 en position 0 for i in range (1, 11): A[i] =(A[i - 1] + 1) * 2 # Tu ne peux pas modifier A indice 1 qui n'existe pas A.append(A[i]) print(A)
Ajouter un élément à la liste se fait par .append(). Si tu veux modifier la liste, il faudrait au départ la créer avec des valeurs à zéro par exemple. Dans ce cas plus besoin de .append().
A = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # ou A = [0] * 11 A[0] = 1 for i in range (1, 11): A[i] =(A[i - 1] + 1) * 2 print(A)
Tu peux aussi passer par une variable intermédiaire, mais c'est une étape inutile
A = [1] for i in range (1, 11): V =(A[i - 1] + 1) * 2 A.append(V) print(A)