0

只是一点背景:这是一个类似 STRIPS 的程序。这个测试一直返回假,即使它应该是真的。从我在调试器中看到的应该是真的,我看不出为什么它会返回假。

在此处输入图像描述

谢谢你的帮助。调试器图像:

世界:

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')都将返回Aand B

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

如果您将退货更改为,==那么它将正常工作:

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