Python 每日一题(获取指定位数区间内的所有水仙花数)

Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养。


题目:

   输入指定的位数,获取其对应区间范围内哪些是水仙花数,如:输入3,则表示100-1000区间范围。

   水仙花数:表示一个数的各个位上的数的对应次方的和等于该数。

   如:3位数:153=1**3+5**3+3**3; 4位数:1634=1**4+6**4+3**4+4**4

分析:

   (1)遍历数中的每位数,将其对应次方并求和,判断各个位上的数的和是否与该数相等。

   (2)遍历数位对应的区间传入判断是否为水仙花数。

实现:

def waterNumber(num, figure):
    '''
        判断一个数是否为水仙花数
    :param num: int, 要判断的数字
    :param figure: int,表示位数
    :return: bool,True:数字是水仙花数
    '''
    str_num = str(num)
    total_number = 0
    for n in str_num:
        total_number += int(n) ** figure
    return total_number == num


def squeNumber(figure):
    '''
        存储指定区间内哪些是水仙花数
    :param figure: int,表示位数
    :return: list, 存储水仙花数
    '''
    # 方法1:
    # list_number = []
    # for i in range(10**(figure-1), 10**figure):
    #     if waterNumber(i, figure):
    #         list_number.append(i)
    # return list_number

    # 方法2:列表推导式
    return [i for i in range(10**(figure-1), 10**figure) if waterNumber(i, figure)]

print(squeNumber(4))
print(squeNumber(3))

结果:

[1634, 8208, 9474]
[153, 370, 371, 407]

【结语】以上整个程序的实现逻辑,还存在很多不全面的地方,欢迎各位大佬指点;如果觉得笔者不易,请给予点赞,给予我记录更多文章的动力!!

你可能感兴趣的