私は 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