Python(6):上机练习——函数练习之水仙花数

题目:
(1)创建一个函数,接受一个参数n(n>=100),判断这个数是否为水仙花数,结果返回True或者False。

水仙花数:满足如果这个数为m位数,则每个位上的数字的m次幂之和等于它本身

(2)创建一个函数,接受一个参数max(max>=1000),调用上题编写的判断函数,求100到max之间的水仙花数

IDE:
Thonny

(1)
过程:

① 接受参数n:n=input(‘请输入一个大于100的参数n:’)

此处需注意:input()的返回值是字符串格式

② 要判断n是否为水仙花数——>要得到每个位上的数字
思路1:除法,如153/100=1,(153-100)/10=5,(153-150)/1=3,太麻烦
思路2:尝试通过切片操作得到每位数
③ 用if语句判断是否相等

代码:

n=input('请输入一个大于100的参数n:')
m=len(n)
i=0
s=0
while i<m:
   s=s+int(n[i:i+1:1])**m
   i=i+1
if int(n)<100:
    print('请确认n是否大于100')
else:
    if s==int(n):
        print('True')
    else:
        print('False')

运行结果:
在这里插入图片描述
遇到的问题:

  1. while拼写错误,运行代码一直显示符号不正确
  2. int和str的区分,input返回n为字符串形式(后对字符串进行切片,切片后得到的也是str)
    len()不能用于int型
    m**n运算(求乘方)用于int型,切片后的str要变为int型再进行乘方
    进行n和100的对比时,也要化为int型

len()是内置函数,返回对象的长度(元素个数)。实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。

(2)
过程
对(1)中的代码进行小修改
① 记住原代码中n是str型,而range() 函数创建的是整数列表,添加n=str(n),把range()生成的int转换为str
② print改为return,print只能打印,无法传递函数值

range()函数可创建一个整数列表,一般用在 for 循环中。

利用迭代循环for来对(100,max)间的整数进行水仙花数判定
创建一个空列表alist,如果是水仙花数,就用append操作把k加到列表中,迭代循环完毕后,else print最后统一打印
和(1)中同理,input返回值max是str型,放到range()中要转变为int型

代码

def wflower(n):
#   n=input('请输入一个大于100的参数n:')
    n=str(n)
    m=len(n)
    i=0
    s=0
    while i<m:
       s=s+int(n[i:i+1:1])**m
       i=i+1
    if int(n)<100:
        print('请确认n是否大于100')
    else:
        if s==int(n):
            return('True')
        else:
            return('False')

max=input('请输入参数max(max>=1000):')
alist=[]
for k in range(100,int(max)):
    re=wflower(k)
    if re=='True':
        alist.append(k)
    k=k+1
else:
    print('100到max之间的水仙花数有:',alist)

猜你喜欢

转载自blog.csdn.net/weixin_47128888/article/details/108288756