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)