0
src = max(gameinfo.my_planets.values(), key=lambda p: p.num_ships)
dest = min(gameinfo.not_my_planets.values(), key=lambda p:p.num_ships)

if len(gameinfo.my_fleets) > 0:

for fleet in gameinfo.my_fleets.values(): 
    print fleet.dest.id
    self.dests.append(fleet.dest)

    for i, value in self.dests:
        print value.id
        while value == dest:
           self.dests[i] = choice(gameinfo.enemy_planets.values())

    for i, fleet in gameinfo.my_fleets.values(): 
        gamefleet.fleet_order(fleet, self.dests[i], int(fleet.num_ships))


    # clear for now
    self.dests = []
    return

問題は、最後の 2 つの for ループで、正確に何をすべきかわからないことです...「反復不可」エラーが発生します。ロジックは正しいですが、キーワードが間違っているかどうかはわかりません。これを一晩中やっていましたtttt!

4

2 に答える 2

0

これが機能するためには、Python iterablesと呼ばれるもの、反復可能な文字列self.destsやリスト(この場合はサイズ2のタプルのリスト、コードを見る)である必要があります。残念ながら、これら2つは反復可能なオブジェクトではありません(または返されていません)。したがって、なぜそれらがそうではないのか、またはそれらを反復することになっているのかどうかを調べる必要があります。gameinfo.my_fleets.values()

以下は、プログラム内の変数が反復可能なオブジェクトであるかどうかを識別する方法を説明するスタックオーバーフローの質問です。ここで役立つはずです:

于 2012-05-26T14:33:16.367 に答える
0

self.destsとにどのような値が入っているかを確認せずに確実に言うのは難しいgameinfo.my_fleets.values()ですが、代わりに次のように推測しています。

for i, value in self.dests:

あなたが本当に欲しいもの:

for i, value in enumerate(self.dests):

他の for ループについても同様です。

于 2012-05-26T14:38:45.717 に答える