Python之路ex48

2024-09-30 08:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法正确测试下面的代码。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')])

Tags: or代码testscanerrorassertequalresult
3条回答

你可以用下面的句子来代替有罪的线,但是你需要替换两个elif语句

测试verb、stop和noun将始终为True,因为您将它们声明为tuple,并且它们包含值(关键字or开始一个新的表达式,而不是添加单词组)

elif (i not in direction  
    or i not in verb 
    or i not in stop
    or i not in noun):

你也应该把这组词声明为集合,最好是“在测试中”

代码中的错误不是第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个元组连接为一个元组:

elif i not in direction + verb + stop + noun:

如果需要的话,您可以将所有4个元组存储到一个变量中,但它应该能够检查其中任何一个元组是否存在。在

相关问题 更多 >

    热门问题