【循序渐进学Python】运用Python实现"水仙花数"
今天我们来讲一个花里胡哨的案例,叫水仙花数,一说到这个,大多数人第一次接触的人都会想水仙花数是啥?今天我就用案例来给大家展示一下这所谓的水仙花数".
话不多说,上才艺!
求出1-1000以内的所有水仙花数
首先什么是水仙花数?
水仙花数就是数字的个位上数字的三次方加十位上数字的三次方加上百位上数字的三次方等于个位和十位和百位组成的数
例如:153=13+53+3^3
其次我们再来分析一下,怎么获取到个位和十位和百位上的数呢?
# 获取百位上的数
print(153 // 100)
# 值除100的话等于1.53取整除的话为1,获取到百位上的数
# 获取十位上的数
print(153 % 100)
# 先用值除100取余的话获取到53
print((153 % 100) // 10)
# 然后用53除10等于5.3取整除的话获取到5,获取到十位上的数
# 获取个位上的数
print(153 % 10)
# 用值除10的话等于15余3然后%取余,获取到个位上的数
那么既然已经知道怎么获取了,那么接下来我们就开始用Python代码去完成这个案例.
方法一(传统的方法):
# 定义一个空列表
num = []
# for循环遍历1-1000的所有数
for i in range(1, 1000):
# 如果获取到的数小于10,那么就是只有一位(个位)
# 并且获取到的数的三次方等于本身
if i < 10 and i == i ** 3:
# 把复合规则的数据添加到列表中
num.append(i)
# 如果获取到的数小于100大于等于10的话,那么就是有两位(个位和十位)
elif 10 <= i < 100:
# 获取到的值除10取整除获取到十位上的数
shi = i // 10
# 获取到的值除10取余获取到个位上的数
ge = i % 10
# 判断如果十位上的数的三次方加上个位上的数的三次方等于本身的值的话
if i == shi ** 3 + ge ** 3:
# 把复合规则的数据添加到列表中
num.append(i)
# 如果获取到的是大于等于100小于1000的话,那么就是有三位(个位和十位和百位)
else:
# 获取到的值处于100取整除获取到百位上的数
bai = i // 100
# 获取到的值除100取余的话得到一个十位和个位组成的数
# 然后再取整除获取到十位上的数
shi = (i % 100) // 10
# 获取到的值除10取余获取到个位上的数
ge = i % 10
# 获取到个位上的数和十位上的数和百位上的数然后分别三次方相加如果等于获取的值的话
if i == bai ** 3 + shi ** 3 + ge ** 3:
# 把复合规则的数据添加到列表中
num.append(i)
# 输出列表,查看数据
print(num)
方法二(奥利给的方法):
# 方法二:
# 使用高阶函数处理序列
# 利用列表推导式在num中遍历1-1000之间的数赋给a
a = [i for i in range(1, 1000)]
# 高阶函数内存在隐式迭代功能
def fun(x):
# 功能大致一样
bai = x // 100
shi = (x % 100) // 10
ge = x % 10
return x == bai ** 3 + shi ** 3 + ge ** 3
# 利用高阶函数filter函数True的留下Flase的过滤掉,然后赋给变量ret
ret = filter(fun, a)
# 将ret转化为list(列表)以后输出
print(list(ret))