web-dev-qa-db-ja.com

TypeError「Tuple」オブジェクトを修正する方法はアイテムの割り当てをサポートしていません

このチュートリアルのコードの次のフラグメント: http://www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-python

for badguy in badguys:
        if badguy[0]<-64:
            badguys.pop(index)
        badguy[0]-=7
        index+=1
    for badguy in badguys:
        screen.blit(badguyimg, badguy)

私に与えています:

TypeError: 'Tuple'オブジェクトはアイテムの割り当てをサポートしていません

これはbadguyがタプルであるためと考えられます。これは不変であることを意味します(値を変更することはできません)。

t= list(badguy)
        t[0]= t[0]-7
        i+=1

タプルをリストに変換して、マイナス7にできるようにしました。しかし、ゲームでは何も起こりません。

誰か私が何ができるか知っていますか?

ありがとう。

8
Pro-grammer

これを変える

badguy[0]-=7

これに

badguy = list(badguy)
badguy[0]-=7
badguy = Tuple(badguy)

または、badguylistのままにできる場合は、タプルを使用しないでください。現在のコードで問題ありません(タプルの代わりにリストを使用するように変更されています)。

24
inspectorG4dget

別の解決策は

badguy[0] -= 7

する

badguy = (badguy[0] - 7,) + badguy[1:]

これにより、0番目の要素の値が更新された新しいタプルが作成されます。

3
SethMMorton