webentwicklung-frage-antwort-db.com.de

TypeError: 'list'-Objekt kann nicht als Ganzzahl interpretiert werden

Die playSound-Funktion nimmt eine Liste von Ganzzahlen und gibt für jede andere Zahl einen Sound aus. Wenn also eine der Nummern in der Liste 1 lautet, hat 1 einen bestimmten Sound, den es wiedergeben soll. 

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)

Ich erhalte diesen Fehler:

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

Ich habe versucht, die Liste in Ganzzahlen umzuwandeln. Ich bin mir nicht sicher, was ich ändern muss. Ich bin sicher, dass dies effizienter ist. Jede Hilfe wäre sehr dankbar. 

15
Greysus

Fehlermeldungen bedeuten in der Regel genau was sie sagen. Sie müssen also sorgfältig gelesen werden. Wenn Sie das tun, werden Sie feststellen, dass sich das hier nicht wirklich beschwert, wie Sie angenommen haben, über welche Art von Objekt Ihre Liste enthält, sondern eher darüber, welche Art von Objekt es ist. Es soll nicht heißen, dass Ihre Liste Ganzzahlen (Plural) enthalten soll. Stattdessen möchte es, dass Ihre Liste eine Ganzzahl (Singular) und keine Liste von irgendetwas ist. Und da Sie eine Liste nicht in eine einzelne ganze Zahl konvertieren können (zumindest nicht in einer Weise, die in diesem Zusammenhang sinnvoll ist), sollten Sie es nicht versuchen.

Die Frage ist also: Warum will der Interpreter Ihre Liste als ganze Zahl interpretieren? Die Antwort ist, dass Sie Ihre Liste als Eingabeargument an range übergeben, das eine ganze Zahl erwartet. Tu das nicht Sagen Sie stattdessen for i in myList.

12
jez

Für mich bekam ich diesen Fehler, weil ich die Arrays in Parathesen setzen musste. Der Fehler ist in diesem Fall etwas knifflig ...

dh concatenate((a, b)) ist richtig

nicht concatenate(a, b)

hoffe das hilft jemandem lol

3
Ben Arnao

Sie sollten dies stattdessen tun:

for i in myList:
    # etc.

Entfernen Sie also den Teil range(). Die Funktion range() wird zum Generieren einer Zahlenfolge verwendet und empfängt als Parameter die Grenzwerte, um den Bereich zu generieren. Es wird nicht möglich sein, einen list als Parameter zu übergeben. Um die Liste zu durchlaufen, schreiben Sie einfach die Schleife wie oben gezeigt.

2
Óscar López

range erwartet ein Integer-Argument, aus dem eine Reihe von Integer-Werten gebildet wird:

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

Wenn Sie ihm eine Liste geben, wird eine TypeError ausgegeben, da range nicht wissen kann, wie sie damit umgehen soll:

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

Wenn Sie auf die Elemente in myList zugreifen möchten, gehen Sie direkt über die Liste:

for i in myList:
    ...

Demo:

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

entferne die range

for i in myList

range nimmt eine ganze Zahl an. Sie möchten für jedes Element in der 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

In playSound() statt

for i in range(myList):

versuchen

for i in myList:

Dies wird den Inhalt von myList durchlaufen, von dem ich glaube, dass er es will. range(myList) macht keinen Sinn.

1
MattDMo

Der Fehler ist davon:

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

Sie können keine Liste an range übergeben, die eine ganze Zahl erwartet. Höchstwahrscheinlich wollten Sie folgendes tun:

 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):