import unittest
from paycheck import with_checker
class TestStrings(unittest.TestCase):
@with_checker([int])
def test_sort(self, list_of_ints):
self.assertTrue(isinstance(list_of_ints, list))
self.assertTrue(len(list_of_ints) == len(qsort(list_of_ints)))
self.assertTrue(False)
if __name__ == '__main__':
unittest.main()
def qsort (list):
if list == []:
return []
else:
pivot = list [0]
lesser = qsort([x for x in list[1:] if x<pivot])
greater = qsort([x for x in list[1:] if x>=pivot])
return lesser + [pivot] + greater
这给了我global name qsort not defined
(即使我在同一个班级里)。这里有什么问题?我想这很简单,但我还不熟悉Python。
答案 0 :(得分:3)
在定义函数之前,您似乎正在运行测试。 Python中的函数定义是可执行语句,与其他语句一样,按照它们遇到的顺序执行。由于您在定义unittest.main()
之前调用qsort
,因此在运行测试时未定义qsort
。在unittest.main()
阻止后移动def qsort
来电。
当你在这里时,最好不要将def
置于if __name__=="__main__"
区块内。通常,if块将是程序中的最后一位。只是做
def qsort (list):
if list == []:
return []
else:
pivot = list [0]
lesser = qsort([x for x in list[1:] if x<pivot])
greater = qsort([x for x in list[1:] if x>=pivot])
return lesser + [pivot] + greater
if __name__ == '__main__':
unittest.main()
另请注意,qsort与任何内容都不是“同一类”。它不属于任何阶级。这只是一个功能。
答案 1 :(得分:1)
if __name__...
处的dedent表示类定义的结束。你应该将这两行移到底部,qsort现在是你班级的一部分
import unittest
from paycheck import with_checker
class TestStrings(unittest.TestCase):
@with_checker([int])
def test_sort(self, list_of_ints):
self.assertTrue(isinstance(list_of_ints, list))
self.assertTrue(len(list_of_ints) == len(qsort(list_of_ints)))
self.assertTrue(False)
def qsort (list):
if list == []:
return []
else:
pivot = list [0]
lesser = qsort([x for x in list[1:] if x<pivot])
greater = qsort([x for x in list[1:] if x>=pivot])
return lesser + [pivot] + greater
if __name__ == '__main__': # move these two lines
unittest.main() # to the bottom