通过在骑自行车期间改变的字典产生

时间:2012-06-20 20:55:40

标签: python dictionary yield next coroutine

我正在使用Python和Panda3D框架并且已经在Forum上提出了问题,但是我想我会在一个更普通的Python社区中提出问题。让我们说在一个游戏中我有一个船只列表,这里表示为一个id:字符串对的字典。使用tab键可以循环显示该dict,使用a键将为dict添加一个键:值对。在播放期间,dict不仅会获得键值:值对,还会丢失一些,并且必须在扫描之前过滤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版本不得不这样做。

anybode可以帮助我(1)在两个Python版本之间简化 next 的使用和(2)用术语改进代码添加和删​​除船只

0 个答案:

没有答案