这是【Python 百练成钢】系列文章的第 002 篇,计划完成 100 道练习题。
本文环境:python3.8
计算自幂数
什么是自幂数?
自幂数:也叫超完全数字不变数、自恋数、阿姆斯特朗数(Armstrong number),
特征:一个 n 位数(n≥1 ),它的每个位上的数字的 n 次幂之和等于它本身 (例如:
1
3
+
5
3
+
3
3
=
153
1^3 + 5^3+ 3^3 = 153
13+53+33=153) 即我们上一篇文章中的水仙花数也属于自幂数的一种。
根据位数不同,又对应有不同的自幂数名字(这还颇有点金庸武侠中给不同武功起名的意思呢): 一位自幂数:独身数 两位自幂数:没有 三位自幂数:水仙花数 四位自幂数:四叶玫瑰数 五位自幂数:五角星数 六位自幂数:六合数 七位自幂数:北斗七星数 八位自幂数:八仙数 九位自幂数:九九重阳数 十位自幂数:十全十美数
计算任意自幂数
需求描述: 定义函数,根据入参自动计算对应范围内的所有自幂数。
实现方法如下:
def get_power_nums(start: int = 100, end: int = 1000):
"""
根据数据长度判断幂次,计算任意范围的自幂数
:param start: 起始值,包含
:param end: 结束值,不包含
:return:
"""
if type(start) is int and type(end) is int and 0 <= start < end:
my_range = (x for x in range(start, end))
for num in my_range:
sum = 0
p = len(str(num))
a = [int(s) for s in str(num)]
for i in a:
sum += i ** p
if num == sum:
yield num
elif type(start) is not int or type(end) is not int:
raise Exception('参数类型错误')
elif start < 0 or start > end:
raise Exception('参数超出范围')
调用函数:
n = get_power_nums(0, 100000)
print([i for i in n])
|