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.
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.
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.
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
>>>
supprimez la range
.
for i in myList
la plage prend dans un entier. vous voulez pour chaque élément de la liste.
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)
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
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.
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):