Python水仙花数研究

水仙花数简介

如果一个数各个数位上的数字的立方之和等于这个数本身,那么这个数被称为“水仙花数”。

例:
23不是水仙花数,因为23+33=8+27=35≠23
153是水仙花数,因为13+53+33=1+125+27=153=153

初阶研究

目标:根据用户输入的数,判断它是不是水仙花数。

源码分享

以下是程序的源码:

def check_number(n):
    '''给定一个数n,判定它是不是水仙花数'''
    list_n = list(str(n))
    result = 0
    for a in list_n:
        result += int(a)**3
    # 根据是否相等返回True或False
    if result == n:
        return True
    else:
        return False

if __name__ == '__main__':

    while True:
        message = "输入一个数,我来告诉你它是不是水仙花数。\n输入“q”退出。"

        number = input(message) # 用户输入
        if number == "q": # 退出程序
            break
        
        number = int(number)# 转为数字


        # 根据判定结果输出结果
        if check_number(number) == True:
            print('它是水仙花数。\n')
        elif check_number(number) == False:
            print('它不是水仙花数。\n')

程序分析

判断水仙花数的函数

check_number()函数提供一个参数n,判断它是不是水仙花数。

def check_number(n):
    '''给定一个数n,判定它是不是水仙花数'''
    list_n = list(str(n))
    result = 0
    for a in list_n:
        result += int(a)**3
    # 根据是否相等返回True或False
    if result == n:
        return True
    else:
        return False

用户输入

根据用户输入的数字或者“q”来继续小程序的行为。

    while True:
        message = "输入一个数,我来告诉你它是不是水仙花数。\n输入“q”退出。"

        number = input(message) # 用户输入
        if number == "q": # 退出程序
            break
        
        number = int(number)# 转为数字

使用函数判断

        # 根据判定结果输出结果
        if check_number(number) == True:
            print('它是水仙花数。\n')
        elif check_number(number) == False:
            print('它不是水仙花数。\n')

运行结果展示

运行结果展示

高阶研究

目标:输入数字n,返回长度为n的所有水仙花数。

源码分享

以下是程序源码:
(备注:如果输入数字n较大,程序运行会比较慢)

def check_number(n):
    '''给定一个数n,判定它是不是水仙花数'''
    list_n = list(str(n))
    result = 0
    for a in list_n:
        result += int(a)**3
    # 根据是否相等返回True或False
    if result == n:
        return True
    else:
        return False

def main():
    num = input('输入数字n,输出长度为n的所有水仙花数。\n')
    num = int(num)
    if num == 1:
        f_n = 0
    else:
        f_n = int('1'+'0'*(num-1))
    l_n = int('1'+'0'*num)
    
    result = []
    for n in range(f_n,l_n):
        if check_number(n) == True:
            result.append(str(n))
        elif check_number(n) == False:
            pass
    return result

if __name__ == '__main__':
    num_list = main()
    if num_list:
        print(','.join(num_list))
    else:
        print('没有水仙花数!')

程序分析

注:判断水仙花数的函数和初阶研究一样。

根据数字n得出数字范围

构造出数字上限和下限(下限+1,为了后面range()函数做铺垫)

	num = input('输入数字n,输出长度为n的所有水仙花数。\n')
    num = int(num)
    if num == 1:
        f_n = 0
    else:
        f_n = int('1'+'0'*(num-1))
    l_n = int('1'+'0'*num)

遍历列表以寻找所有水仙花数

用定义好的函数check_number()寻找水仙花数。

    result = []
    for n in range(f_n,l_n):
        if check_number(n) == True:
            result.append(str(n))
        elif check_number(n) == False:
            pass
    return result

简单判断列表内是否有水仙花数

这里比较简单,就不多加以分析了。

if __name__ == '__main__':
    num_list = main()
    if num_list:
        print(','.join(num_list))
    else:
        print('没有水仙花数!')

运行结果展示

这是程序的运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖泥鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值