TypeError: ‘list’-object kan niet worden geïnterpreteerd als een geheel getal

De functie playSoundneemt een lijst met gehele getallen en speelt een geluid af voor elk ander nummer. Dus als een van de nummers in de lijst 1is, heeft 1een bepaald geluid dat zal worden afgespeeld.

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)

Ik krijg deze foutmelding:

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

Ik heb een paar manieren geprobeerd om de lijst naar gehele getallen te converteren. Ik weet niet zo zeker wat ik moet veranderen. Ik weet zeker dat er een efficiëntere manier is om dit te doen. Alle hulp zou zeer op prijs worden gesteld.


Antwoord 1, autoriteit 100%

Foutberichten betekenen meestal precieswat ze zeggen. Ze moeten dus zeer aandachtig worden gelezen. Als je dat doet, zul je zien dat deze niet echt klaagt, zoals je lijkt te hebben aangenomen, over wat voor soort object je lijst bevat, maar eerder over wat voor soort object het is. Het zegt niet dat het wil dat uw lijst gehele getallen (meervoud) bevat – in plaats daarvan lijkt het erop te willen dat uw lijst een geheel getal(enkelvoud) is in plaats van een lijst van wat dan ook. En aangezien je een lijst niet kunt converteren naar een enkel geheel getal (tenminste, niet op een manier die in deze context zinvol is), zou je het niet moeten proberen.

De vraag is dus: waarom heeft de tolk lijken te willen om uw lijst te interpreteren als een integer? Het antwoord is dat u uw lijst passeren als de invoer argument naar range, die een integer verwacht. Doe dat niet. Say for i in myList.


Antwoord 2, Autoriteit 40%

Voor mij ik kreeg deze fout, omdat ik die nodig zijn om de arrays in paratheses zetten. De fout is een beetje lastig in dit geval …

ie. concatenate((a, b))rechter

niet concatenate(a, b)

hoop dat het helpt.


Antwoord 3, Autoriteit 20%

De fout is van deze:

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

U kunt geen lijst naar range, die een integer verwacht passeren. Het meest waarschijnlijk, je bedoeld om te doen:

def playSound(myList):
  for list_item in myList:

of

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

of

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

Antwoord 4, Autoriteit 18%

rangeis een integer verwacht argument, waaruit een reeks van gehele getallen zal bouwen:

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

Bovendien, waardoor het een lijst zal een TypeErroromdat rangezal niet weten hoe om te gaan:

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

Als u toegang wilt tot de items in myList, loop dan rechtstreeks over de lijst:

for i in myList:
    ...

Demo:

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

Antwoord 5, autoriteit 12%

verwijder het range.

for i in myList

bereik bevat een geheel getal. u wilt voor elk element in de lijst.


Antwoord 6, autoriteit 8%

U zou dit in plaats daarvan moeten doen:

for i in myList:
    # etc.

Dat wil zeggen, verwijder het gedeelte range(). De functie range()wordt gebruikt om een reeks getallen te genereren, en het ontvangt als parameters de limieten om het bereik te genereren, het zal niet werken om een lijstdoor te geven als parameter. Om de lijst te herhalen, schrijft u gewoon de lus zoals hierboven weergegeven.


Antwoord 7, autoriteit 5%

aangezien het een lijst is, kan deze niet rechtstreeks in de bereikfunctie worden opgenomen omdat de enkelvoudige integerwaarde van de lijst ontbreekt.

gebruik dit

for i in range(len(myList)):

Hiermee krijgen we de enkelvoudige integerwaarde die gemakkelijk kan worden gebruikt


Antwoord 8, autoriteit 2%

In playSound(), in plaats van

for i in range(myList):

probeer

for i in myList:

Dit herhaalt de inhoud van myList, wat volgens mij is wat je wilt. range(myList)slaat nergens op.


Antwoord 9, autoriteit 2%

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)

Other episodes