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