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 循环不确定该做什么……得到一个“不可迭代”的错误。逻辑是正确的,但只是不确定我是否有关键字错误或其他什么。一直在这一切nighttttt!

4

2 回答 2

0

为此,self.dests需要gameinfo.my_fleets.values()- 或需要返回 - 所谓的 python iterables对象,如字符串和可以迭代的列表(在这种情况下可能是大小为 2 的元组列表,查看您的代码)。不幸的是,这两个不是 - 或不返回 - 可迭代对象。因此,您必须研究为什么它们不是,或者您是否应该遍历它们。

下面是一个堆栈溢出问题,讨论如何识别程序中的变量是否是可迭代对象。这里应该有一些帮助:

于 2012-05-26T14:33:16.367 回答
0

self.dests如果不看到and中有什么样的值,很难确定gameinfo.my_fleets.values(),但我猜是这样的,而不是:

for i, value in self.dests:

你真的想要:

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

同样对于另一个 for 循环。

于 2012-05-26T14:38:45.717 回答