0

ちょっとした背景: これは STRIPS のようなプログラム用です。このテストは、true である必要があるにもかかわらず、false を返し続けます。デバッガーで確認できることから、それは true である必要があり、なぜ false を返すのかわかりません。

ここに画像の説明を入力

ご協力いただきありがとうございます。デバッガー イメージ:

世界:

def __init__(self):
    self.logic = {}
    self.actions = {}
    self.goals = set()
    self.curr_state = set()

テストケース:

def setUp(self):
    self.world = World()

def testWorldis_true(self):
     pred = "on"
     params = ("A", "B")
     self.assertFalse(self.world.is_true(pred, params))
     self.world.logic[pred] = params
     self.assertTrue(self.world.is_true(pred, params))

出力:

======================================================================
FAIL: testWorldis_true (objorstrippertests.TestWorldFunctions)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".stripperAssignment\src\objorstrippertests.py", line 54, in testWorldis_true
    self.assertTrue(self.world.is_true(pred, params))
AssertionError: False is not true
4

2 に答える 2

1

交換:

 self.world.logic[pred] = params

と:

 self.world.logic[pred] = set([params])

またはさらに良い(カプセル化を維持する!):

 self.world.set_true(pred, params)

logicは、単一のパラメータータプルではなく、述語からパラメータータプルのセットへのマップです。

于 2012-09-22T04:09:27.183 に答える
1

テストは実際には正しく機能しています。

>>> d = {}
>>> d['on'] = ('A','B')
>>> ('A','B') in d['on']
False

これは がタプルにないFalseためです。反復ごとに次の値が返されます。('A','B')('A','B')('A','B')AB

>>> for x in d['on']:
...    print x
... 
A
B

リターンを次のように変更すると==、正しく機能します。

>>> d['on'] == ('A','B')
True
于 2012-09-22T04:14:32.090 に答える