基于python的完全数之TDD版本(修改)

来源:互联网 发布:java array list 泛型 编辑:程序博客网 时间:2024/06/03 12:03

实现代码:

#!/usr/bin/env python  # -*- coding: utf-8 -*-  # Filename: perfect.pyfrom math import sqrt, floordef is_factor(factor, num):    return num % factor == 0def add_factors(factor, num):    s = factor    if int(num / factor) != factor:        s +=  int(num / factor)    return sdef cal_aliquot_sum(num):    sum = 1    for i in range(2, int(floor(sqrt(num))) + 1):        if (is_factor(i, num)):            sum += add_factors(i, num)    return int(sum) def aliquot_sum(num):    sum = 0    if (num > 0):        sum = cal_aliquot_sum(num)    return sumdef is_perfect(num):    return aliquot_sum(num) == num

 

测试代码:

#!/usr/bin/env python  # -*- coding: utf-8 -*-  # Filename: test_perfect.pyimport unittestfrom perfect import *'''' 1. I need judge if a number is a factor' 2. I need the sum of aliquot sum of a num' 3. I need judge if a number is perfect'''class PerfectNumTestCase(unittest.TestCase):    def setUp(self):        self.PERFECT_NUMS = [6, 28, 496, 8128, 33550336]        return    def tearDown(self):        return    def test_1_is_factor_of_10(self):        self.assertTrue(is_factor(1, 10))    def test_10_is_factor_of_10(self):        self.assertTrue(is_factor(10, 10))    def test_3_is_not_factor_of_10(self):        self.assertFalse(is_factor(3, 10))    def test_aliquot_sum_for_6(self):        self.assertEqual(6, aliquot_sum(6))    def test_aliquot_sum_for_28(self):        self.assertEqual(1 + 28 + 2 + 14 + 4 + 7 - 28, aliquot_sum(28))    def test_aliquot_sum_for_16(self):        self.assertEqual(1 + 16 + 2 + 8 + 4 - 16, aliquot_sum(16))    def test_aliquot_sum_for_negative(self):        self.assertEqual(0, aliquot_sum(-20))    def test_is_perfect(self):        for num in self.PERFECT_NUMS:            self.assertTrue(is_perfect(num))    def test_is_non_perfect(self):        for num in (2, 10000):            if self.PERFECT_NUMS.count(num) > 0:                self.assertTrue(is_perfect(num))            else:                self.assertFalse(is_perfect(num))if __name__ == "__main__":    unittest.main()


 测试报告:

原创粉丝点击