web-dev-qa-db-fra.com

TypeError: l'objet 'list' ne peut pas être interprété comme un entier

La fonction playSound prend une liste d’entiers et va jouer un son pour chaque nombre différent. Donc, si l’un des numéros dans la liste est 1, 1 a un son désigné qui sera joué. 

def userNum(iterations):
  myList = []
  for i in range(iterations):
    a = int(input("Enter a number for sound: "))
    myList.append(a)
    return myList
  print(myList)

def playSound(myList):
  for i in range(myList):
    if i == 1:
      winsound.PlaySound("SystemExit", winsound.SND_ALIAS)

Je reçois cette erreur:

TypeError: 'list' object cannot be interpreted as an integer

J'ai essayé plusieurs façons de convertir la liste en nombres entiers. Je ne suis pas trop sûr de ce que je dois changer. Je suis sûr qu'il existe un moyen plus efficace de le faire. Toute aide serait très grandement appréciée. 

15
Greysus

Les messages d'erreur signifient généralement précisément ce qu'ils disent. Ils doivent donc être lus très attentivement. En faisant cela, vous verrez que celui-ci ne se plaint pas réellement, comme vous semblez l’avoir supposé, du type d’objet que votre liste contient , mais plutôt de quel type d’objet il est . Il ne dit pas qu'il veut que votre liste contienne des entiers (pluriel), au lieu de cela, il semble vouloir que votre liste soit un entier (singulier) plutôt qu'une liste de quoi que ce soit. Et comme vous ne pouvez pas convertir une liste en un seul entier (du moins, pas de manière significative dans ce contexte), vous ne devriez pas essayer.

La question est donc: pourquoi l'interprète semble-t-il vouloir interpréter votre liste comme un entier? La réponse est que vous passez votre liste en tant qu’argument d’entrée à range, qui attend un entier. Ne fais pas ça. Dites for i in myList à la place.

12
jez

Vous devriez faire ceci à la place:

for i in myList:
    # etc.

En d’autres termes, supprimez la partie range(). La fonction range() est utilisée pour générer une séquence de nombres, et elle reçoit comme paramètres les limites pour générer la plage, cela ne fonctionnera pas de passer un paramètre list en tant que paramètre. Pour parcourir la liste, écrivez simplement la boucle comme indiqué ci-dessus.

2
Óscar López

range attend un argument entier, à partir duquel il construira une plage d'entiers:

>>> range(10)
range(0, 10)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

De plus, lui donner une liste lèvera une TypeError car range ne saura pas comment le gérer:

>>> range([1, 2, 3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object cannot be interpreted as an integer
>>>

Si vous souhaitez accéder aux éléments de myList, parcourez directement la liste:

for i in myList:
    ...

Démo:

>>> myList = [1, 2, 3]
>>> for i in myList:
...     print(i)
...
1
2
3
>>>
2
iCodez

supprimez la range

for i in myList

la plage prend dans un entier. vous voulez pour chaque élément de la liste.

2
Saher Ahwal
def userNum(iterations):
    myList = []
    for i in range(iterations):
        a = int(input("Enter a number for sound: "))
        myList.append(a)
    print(myList) # print before return
    return myList # return outside of loop

def playSound(myList):
    for i in range(len(myList)): # range takes int not list
        if i == 1:
            winsound.PlaySound("SystemExit", winsound.SND_ALIAS)
1
Malik Brahimi

Pour moi, je recevais cette erreur parce que je devais mettre les tableaux en parathèses. L'erreur est un peu délicate dans ce cas ...

c'est à dire. concatenate((a, b)) a raison

pas concatenate(a, b)

j'espère que ça aide quelqu'un lol

1
Ben Arnao

Dans playSound(), au lieu de

for i in range(myList):

essayer

for i in myList:

Cela va parcourir le contenu de myList, ce que je crois être ce que vous voulez. range(myList) n'a aucun sens.

1
MattDMo

L'erreur provient de ceci:

def playSound(myList):
  for i in range(myList): # <= myList is a list, not an integer

Vous ne pouvez pas passer une liste à range qui attend un entier. Très probablement, vous vouliez faire:

 def playSound(myList):
  for list_item in myList:

OR

 def playSound(myList):
  for i in range(len(myList)):

OR

 def playSound(myList):
  for i, list_item in enumerate(myList):
1