2

我正在使用 Python 和 Panda3D 框架,并且已经在我们的论坛上提出了这个问题,但是我想我会在更一般的 Python 社区中提问。假设在游戏中我有一个船列表,这里表示为带有 id:string 对的字典。使用制表键可以循环浏览该字典,使用 a 键将向字典添加一个键:值对。在播放过程中,dict 不仅会获得 key:value 对,还会丢失一些,并且必须在扫描前对 dict 进行过滤。

我到目前为止的代码是:

from itertools import cycle, ifilter, ifilterfalse

class GeneratorTest(DirectObject):
   def __init__(self):

      self.ships = {1:"node1", 2:"node2", 3:"node3", 4:"node4", 5:"node5", 6:"node6", 7:"node7"}
      self.ships_iscannable = cycle(ifilter(self.filter_ships, self.ships))

      self.accept("tab", self.do_filtered_scan)
      self.accept("a", self.add_ship)

   def filter_ships(self, n):
      scannable = [i for i in self.ships if i != 3]
      if n in scannable:
         return True

   def do_filtered_scan(self):
      print self.ships_iscannable.next()

   def add_ship(self):
      plus_i = sorted(self.ships, reverse=True)[-1] + 1
      self.ships[plus_i] = "node%s" % plus_i
      print plus_i, self.ships

gt = GeneratorTest()      

run()

更糟糕的是,我需要一个 Python 2.5 版本和一个 2.6 版本。后者获得了 .next() 方法,因此 2.5 版本不得不这样做。

任何人都可以帮助我(1)简化 next 两个 Python 版本之间的使用和(2)在添加和删除船舶方面改进代码吗?

4

0 回答 0