目录

  • 水仙花数简介
  • 初阶研究
  • 源码分享
  • 程序分析
  • 判断水仙花数的函数
  • 用户输入
  • 使用函数判断
  • 运行结果展示
  • 高阶研究
  • 源码分享
  • 程序分析
  • 根据数字n得出数字范围
  • 遍历列表以寻找所有水仙花数
  • 简单判断列表内是否有水仙花数
  • 运行结果展示


水仙花数简介

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

例:
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')

运行结果展示

python求水仙花数代码详解 python求水仙花数def_python

高阶研究

目标:输入数字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('没有水仙花数!')

运行结果展示

这是程序的运行结果:

python求水仙花数代码详解 python求水仙花数def_程序分析_02


python求水仙花数代码详解 python求水仙花数def_程序分析_03


python求水仙花数代码详解 python求水仙花数def_程序分析_04


python求水仙花数代码详解 python求水仙花数def_退出程序_05


python求水仙花数代码详解 python求水仙花数def_python求水仙花数代码详解_06


python求水仙花数代码详解 python求水仙花数def_python求水仙花数代码详解_07


python求水仙花数代码详解 python求水仙花数def_程序分析_08


python求水仙花数代码详解 python求水仙花数def_python_09