python2.7练习小例子(十二)

    12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

    程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

    程序源代码:

 

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for n in range(100,1000):
    i = n / 100
    j = n / 10 % 10
    k = n % 10
    if n == i ** 3 + j ** 3 + k ** 3:
        print n

    以上实例输出结果为:

 

153
370
371
407

    将三位数看成由三个数组成,并判断其各位数字立方和是否等于该数本身:

 

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for x in range(1,10):
    for y in range(0,10):
        for z in range(0,10):
            s1=x*100+y*10+z
            s2=pow(x,3)+pow(y,3)+pow(z,3)
            if s1==s2:
                print "水仙花数有:%7ld" %(s1)

    

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for i in range(100, 1000):
    s = str(i)
    if int(s[0]) ** 3 + int(s[1]) ** 3 + int(s[2]) ** 3 == i:
        print(i)

    

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

L = []
for n in range(100,1000):
    i = n / 100
    j = n /10 % 10
    k = n % 10
    if n == i ** 3 + j ** 3 + k ** 3:
        if n == pow(i,3) + pow(j,3) +pow(k,3):
            L.append(n)
print(L)
print len(L)

    兼容 Python2.x 与 Python3.x,Python3.x 取整为 //,而不是 /, 参考方法:

 

#!/usr/bin/python3
# -*- coding: UTF-8 -*-

for i in range(100,1000):
    h=i//100
    t=(i-100*h)//10
    s=i-100*h-10*t
    if i==h**3+t**3+s**3:
        print(i)

    

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

a = 1
b = 1
c = 1
for a in range(0,10):
    for b in range(0,10):
        for c in range(0,10):
            if int(a)**3+int(b)**3+int(c)**3 == a*100+b*10+c and a != 0:
                x = a*100+b*10+c
                print(x)

    

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for x in range(10):
    for y in range(10):
        for z in range(10):
            w = x*100 + y*10 + z
            if (w>100) and (w == x**3 + y**3 + z**3):
                print w

    

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#列表解析法
l=[x**3+y**3+z**3 for x in range(0,10) for y in range(0,10) for z in range(0,10) if (str(x)+str(y)+str(z))==str(x**3+y**3+z**3)]
print(l)

    

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for n in range(100,1000):
    m = n
    sumValue = 0
    while(m>0):
        (m,r) = divmod(m, 10)
        sumValue += r ** 3
    if n == sumValue:
        print(n)

    

#coding:UTF-8

print [i for i in range(100,1000) if (i/100)**3+((i-i/100*100)/10)**3+(i%10)**3 == i]

    Python3 参考:

 

#水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身

#生成器函数ppdi,可生成十进制自然数中的所有水仙花数,共有88个
def ppdi():
    n=3
    while 1:
        #生成器推导式
        l=(i for i in range(10**(n-1),10**n) if sum([int(str(i)[j])**n for j in range(n)])==i)
        yield l
        n+=1

#最大的水仙花数有39位
def f(max):
    for i in ppdi():
        for j in i:
            if j<10**max:
                print(j)
            else:
                break
        if j>10**max:
            break
        
#为环保起见,建议7位以内即可   
f(5)

    这次的小例子有点意思。开始我都不知道水仙花数是什么鬼?嘿嘿。。。

    如果感觉不错的话,请多多点赞支持哦。。。

  原文链接:https://blog.csdn.net/luyaran/article/details/80049547

posted @ 2018-04-25 11:47  luyaran  阅读(403)  评论(0编辑  收藏  举报