python 水仙花数

2020-03-26  本文已影响0人  十二支箭
最近开始学习python,一个经典的习题就是构建一个判断水仙花数的函数。
import math #其实这里不需要用math.pow,用**就行,但是懒得改了
def SXH(n):
    sum=0
    if n<100:
        print("Please input an integer >=100")
    else:
        m = len(str(n))
        for i in range(1,m):
            k = math.pow((n % math.pow(10,i))//math.pow(10,i-1),m)
            sum+=k
        sum0 = sum++math.pow(n//math.pow(10,m-1),m)    
        if n==sum0:
            return True      #开始这里没有写返回值,导致下面调用的时候吗仅执行了本函数,
        #并未将其的结果作为布尔变量进行判断
            print("True")
        else:
            return False
            print("False")

然后调用上面的函数,实现一个输出从1000至给定输入值范围的水仙花数函数
def all_SXH(max):
    if max<1000:
        print("Please input an integer >=1000")
    else:
        SXH_list=[]
        for i in range(1000,max+1):
            if SXH(i):
                SXH_list.append(i)
        print(SXH_list)        

由于本人是编程萌新加菜鸡,只想到了最老套的整除求余的方法,但是python中最好用的容器——列表还提供了一种更简单的方法。

def fast_SXH(n):
    a=str(n)
    s=0
    for i in range(len(a)):
        s+=int(a[i])**len(a)
    if n==s:
        return True
    else:
        return False

同样地,实现输出指定范围的水仙花数函数:

def fast_all_SXH(max):
    SXH_list=[]
    for i in range(1000,max+1):
        if fast_SXH(i):
            SXH_list.append(i)
    print(SXH_list)
上一篇 下一篇

猜你喜欢

热点阅读