TypeError : 'builtin function or method' et '_getitem__'

Résolu/Fermé
bob_5506 Messages postés 1 Date d'inscription lundi 7 février 2022 Statut Membre Dernière intervention 7 février 2022 - Modifié le 8 févr. 2022 à 11:55
mamiemando Messages postés 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 - 8 févr. 2022 à 12:02
Bonjour,

Je suis débutant en Python et j'aimerais m'entraîner sur les boucles
for
. Cependant, lorsque j'exécute, mon code python me renvoie cette erreur :
TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'

Voici mon code :
for i in range[0, 1, 6, 8, 9]:
       print(i) 

Je suis sur Kali Linux et je code avec Visual Studio Code.
Quelqu'un peut il m'aider ,
Merci d'avance :D
A voir également:

3 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
7 févr. 2022 à 23:28
Bonjour
Tu veux boucler sur une range au sur un array ?
Car là tu sembles avoir mélangé les deux ...
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 8 févr. 2022 à 11:55
Bonjour,

Ce serait plutôt :

for i in [0, 1, 6, 8, 9]:
    print(i)
0
mamiemando Messages postés 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 7 803
Modifié le 8 févr. 2022 à 12:40
Bonjour,

Phil et yg_be on déjà presque tout dit, mais vu la confusion entre les listes et les
range
je pense qu'un rappel est utile :
  • les listes et les range sont tout deux des itérables : cela signifie qu'on peut itérer dessus avec une boucle
    for
    .
  • une liste contient des éléments arbitraires, possiblement répétés, pas forcément ordonnées (elle garde donc en mémoire tous les éléments qu'elle contient)


for i in [0, 1, 2, 3, 4, 5]:
    print(i)  # Affiche 0 1 2 3 4 5
  • un .
    range
    contient une valeur d'initialisation (pouvant être sous-entendu quand on part de 0) et un pas (pouvant être sous-entendu quand il est égal à 1) et une une borne supérieure (obligatoire). Peut importe la plage de valeur couverte un
    range
    est donc de taille fixe en mémoire.


for i in range(6): # ou for i in range(0, 6, 1)
    print(i)  # Affiche 0 1 2 3 4 5


Concernant l'erreur, la méthode
__getitem__
est appelé lors de l'utilisation de l'opérateur
[ ]
. Or ici on appelle une fonction (
range
), et en python, un nom de fonction ne peut pas être suivi par cet opérateur.

Par contre, on pourrait tout à fait instancier un
range
et appliquer à cette instance l'opérateur
[ ]
.

r = range(10)
print(r[2]) # Affiche 2

r = range(1, 10, 2)
print(list(r)) # Affiche  [1, 3, 5, 7, 9]
print(r[2]) # Affiche 3


Bonne chance
0