我无法正确测试下面的代码。test\u errors()函数工作不正常,但我觉得我的代码设置正确。第25行是我认为行得通的,但我一点运气都没有。在
第25行:
elif i not in direction or verb or stop or noun:
scan_result = scan_result + [('error', i)]
完整代码:
^{pr2}$测试错误功能:
def test_errors():
assert_equal(lexicon.scan("ASDFADFASDF"), [('error', 'ASDFADFASDF')])
result = lexicon.scan("bear IAS princess")
assert_equal(result, [('noun', 'bear')
('error', 'IAS'),
('noun', 'princess')])
你可以用下面的句子来代替有罪的线,但是你需要替换两个elif语句
测试verb、stop和noun将始终为True,因为您将它们声明为tuple,并且它们包含值(关键字
or
开始一个新的表达式,而不是添加单词组)你也应该把这组词声明为集合,最好是“在测试中”
代码中的错误不是第25行而是第20行。简单地检查变量将返回True,除非变量是
None
或false。因此,当您执行if verb
时,如果verb
被设置为一个元组,它将计算为True
。由于第一个elif
的计算结果是True
,因此该块得到执行,代码继续在if..elif..else之外继续,而不计算第二个elif
,即第三个条件,它与第一个elif
有相同的问题。这是python试图找到一个真正的条件,一旦找到一个,它就停止检查任何其他条件。在您要检查单词是在}还是{}或{}。遗憾的是,
direction
还是{either..or
模式在Python中不存在。在正确的python检查方法如下:
elif i.lower() in direction + verb + stop + noun: ... elif i not in direction + verb + stop + noun: ...
您的}是一个函数,两者是分开的,因此不能调用
test_errors
函数也有点不正确。lexicon
是一个dict
,而{lexicon.scan()
。它应该是scan()
。在assert_equal(scan("ASDFADFASDF"), [('error', 'ASDFADFASDF')])
将第24行更改为将所有4个元组连接为一个元组:
如果需要的话,您可以将所有4个元组存储到一个变量中,但它应该能够检查其中任何一个元组是否存在。在
相关问题 更多 >
编程相关推荐