2

私は Python と Panda3D フレームワークを使用しており、既にフォーラムで質問しましたが、より一般的な Python コミュニティで質問したいと思いました。ゲームで船のリストを持っているとしましょう。ここでは、id:string のペアを持つ dict として表されます。タブ キーを使用すると、その辞書を循環できます。a キーを使用すると、キーと値のペアが辞書に追加されます。再生中、辞書はキーと値のペアを取得するだけでなく、一部を失うため、スキャンする前に辞書をフィルター処理する必要があります。

私がこれまでに持っているコードは次のとおりです。

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 用にそれぞれ 1 つのバージョンが必要です。後者は .next() メソッドを取得したため、2.5 バージョンではこれを使用しなくても済みました。

誰でも (1) 2 つの Python バージョン間の使用を簡素化し、 (2)船の追加と削除に関してコードを改善するのに役立ちますか?next

4

0 に答える 0