Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / TypeError: 'range' object doesn't support item deletion

TypeError: 'range' object doesn't support item deletion

Remonter à Forum général Python

TypeError: 'range' object doesn't support item deletion

Envoyé par paulC le 15 Octobre 2016 à 10:12

Bonjour,

J'ai effectué ce programme dans le cadre d'un problème de mathématiques et par curiosité. Le problème nous dit que l'on doit passer le premier nombre d'une liste, puis supprimer le second, puis passer le suivant, puis supprimer celui d'après, et ainsi de suite jusqu'à n'obtenir qu'un seul nombre.

Ex : On prend une liste de 6 nombres : 1, 2 3, 4, 5, 6. passe le 1, on supprime le 2. La liste devient :1, 3, 4, 5, 6. Puis on supprime le 4, puis le 6. La liste devient : 1, 3, 5. Puis comme 6 était le dernier chiffre de la liste, on passe le premier chiffre, c'est à dire le 1, et on supprime le 3. Liste : 1, 5. Puis je passe le 5 et je supprime le 1. Le nombre gagnant est donc le 5.

 

Voici mon programme :

nbNombres = int(input("Nombre de nombres : "))
NbAsupprimmer = 1
roue = range(1, nbNombres + 1)
tailleListe = len(roue)

while tailleListe != 0:
if tailleListe % 2 == 0:
for loop in range(tailleListe // 2):
print(roue[1])
del roue[NbAsupprimmer]
NbASupprimmer += 1
else:
for loop in range(tailleListe // 2):
del roue[NbAsupprimmer]
NbASupprimmer += 1

 

Quand je lance mon programme, il m'affiche :

Traceback (most recent call last):
File "C:/Users/paulc/OneDrive/Documents/Collège/3e/Mathenjeans/Programme 2.py", line 14, in <module>
del roue[NbAsupprimmer]
TypeError: 'range' object doesn't support item deletion

 

C'est que je demande votre aide.

 

Re: TypeError: 'range' object doesn't support item deletion

Envoyé par paulC le 15 Octobre 2016 à 10:14

J'ai oublié de préciser : 

Ce programme n'effectue que le premier tour.

Re: TypeError: 'range' object doesn't support item deletion

Envoyé par jacko le 18 Octobre 2016 à 20:47

Bonjour,

Il faut lire les messages d'erreur : tout y est dit : "'range' object doesn't support item deletion".

Vous êtes en version 3.x : range() ne fournit pas une liste, mais un itérateur qui fournit les divers éléments par itération.

Aussi détruire un élément n'a pas de sens. Ici, "roue" est cet itérateur fourni par range().

roue = range(1, nbNombres + 1)

...

del roue[NbAsupprimmer]    <- ceci n'a pas de sens ("deletion" du message d'erreur).

Si vous voulez maintenir la liste des éléments et en détruire certains, il faut d'abord créer cette liste :

roue = list(range(1, nbNombres + 1))

Ensuite, vous pourrez manipuler (del par exemple) cette liste comme vous voulez.

Bonne continuation.

NB : dans la série 2.x de Python, range() rend effectivement une liste et votre del aurait été valide.

Rendu par Ploneboard