TypeError : 'builtin function or method' et '_getitem__'
Résolu
Bonjour,
Je suis débutant en Python et j'aimerais m'entraîner sur les boucles
Voici mon code :
Je suis sur Kali Linux et je code avec Visual Studio Code.
Quelqu'un peut il m'aider ,
Merci d'avance :D
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
3 réponses
-
Bonjour
Tu veux boucler sur une range au sur un array ?
Car là tu sembles avoir mélangé les deux ...
-
Bonjour,
Ce serait plutôt :
for i in [0, 1, 6, 8, 9]: print(i) -
Bonjour,
Phil et yg_be on déjà presque tout dit, mais vu la confusion entre les listes et lesrange
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 unrange
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 unrange
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 - les listes et les range sont tout deux des itérables : cela signifie qu'on peut itérer dessus avec une boucle