web-dev-qa-db-ja.com

TypeError: 'list'オブジェクトは整数として解釈できません

playSound関数は整数のリストを取得し、異なる数ごとにサウンドを再生します。したがって、リスト内の数字の1つが11には、再生する指定のサウンドがあります。

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)

このエラーが発生しています:

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

リストを整数に変換する方法をいくつか試しました。何を変更する必要があるのか​​よくわかりません。これを行うためのより効率的な方法があると確信しています。どんな助けでも大歓迎です。

20
Greysus

通常、エラーメッセージは正確の意味を意味します。したがって、それらは非常に注意深く読む必要があります。これを行うと、これは実際には、リストの種類containsについてではなく、むしろどの種類のオブジェクトについて不平を言っているのかがわかります。 is。リストに整数(複数)を含めたいと言っているのではなく、リストをinteger(単数)ではなく、何でもリスト。また、リストを単一の整数に変換することはできないので(少なくとも、このコンテキストでは意味のある方法ではありません)、試してはいけません。

質問は次のとおりです。なぜインタープリターはリストを整数として解釈したいのですか?答えは、整数を期待するrangeへの入力引数としてリストを渡すことです。それをしないでください。いう for i in myList代わりに。

17
jez

rangeは整数引数を必要とし、そこから整数の範囲を構築します。

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

さらに、リストを指定すると、TypeErrorが処理方法を知らないため、rangeが発生します。

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

myListのアイテムにアクセスする場合は、リストを直接ループします。

for i in myList:
    ...

デモ:

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

私にとっては、配列をパラセシスに配置する必要があるため、このエラーが発生していました。この場合、エラーは少し注意が必要です...

すなわち。 concatenate((a, b))は正しい

concatenate(a, b)ではありません

それが誰かを助けることを願っています笑

3
Ben Arnao

エラーはこれからです:

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

整数を期待するrangeにリストを渡すことはできません。ほとんどの場合、あなたはそうするつもりでした:

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

代わりにこれを行う必要があります。

_for i in myList:
    # etc.
_

つまり、range()部分を削除します。 range()関数は一連の数値を生成するために使用され、範囲を生成するための制限をパラメーターとして受け取ります。パラメーターとしてlistを渡すことは機能しません。リストを反復処理するには、上記のようにループを記述します。

2
Óscar López

rangeを削除します。

for i in myList

範囲は整数を取ります。リスト内の各要素に必要です。

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

playSound()では、代わりに

_for i in range(myList):
_

試してみる

_for i in myList:
_

これは、myListの内容を反復処理します。 range(myList)は意味がありません。

1
MattDMo