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

本文介绍了一个用于检测完美数的Python程序。该程序包括了判断一个数是否为完美数的功能,并通过单元测试验证了代码的正确性。此外,还提供了一些关于完美数的基本概念及其数学属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现代码:

#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
# Filename: perfect.py

from math import sqrt, floor

def is_factor(factor, num):
    return num % factor == 0

def add_factors(factor, num):
    s = factor
    if int(num / factor) != factor:
        s +=  int(num / factor)
    return s

def 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 sum

def is_perfect(num):
    return aliquot_sum(num) == num

 

测试代码:

#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
# Filename: test_perfect.py

import unittest
from 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()


 测试报告:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值