0
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 にはまだあまり慣れていません。

4

2 に答える 2

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 は「同じクラス」ではないことに注意してください。どのクラスにもありません。それはただの機能です。

于 2012-06-27T06:55:07.990 に答える
1

dedent atif __name__...は、クラス定義の終わりを示します。これらの2行を一番下に移動する必要があります。これで、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
于 2012-06-27T07:00:14.917 に答える