4. python练习题4-水仙花数

4. python练习题4-水仙花数

【目录】

文章目录

  • [4. python练习题4-水仙花数](#4. python练习题4-水仙花数)
    • [1. 目标任务](#1. 目标任务)
    • [2. 水仙花数的特点](#2. 水仙花数的特点)
    • [3. 如何判断一个数是否是水仙花数?](#3. 如何判断一个数是否是水仙花数?)
    • [4. 打印3位水仙花数](#4. 打印3位水仙花数)
    • [5. 判断一个数是不是水仙花数](#5. 判断一个数是不是水仙花数)
    • [6. 列表推导式](#6. 列表推导式)
    • [6. 列表推导式判断一个数是不是水仙花数](#6. 列表推导式判断一个数是不是水仙花数)

【正文】

1. 目标任务

水仙花数是三位数,其各位数字立方和等于该数本身,请打印所有水仙花数。

2. 水仙花数的特点

水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。

【三位水仙花数的特点】

  • 一个三位数,范围从100到999。
  • 各个位上的数字的立方和等于该数本身。

【示例】

153是一个水仙花数。

因为1^3 + 5^3 + 3^3 = 153。

3. 如何判断一个数是否是水仙花数?

  • 将给定的数拆分为各个位上的数字。
  • 计算每个位上数字的n次幂。
  • 将每个位上数字的n次幂相加。
  • 判断相加的结果是否等于原始数。

4. 打印3位水仙花数

【代码示例】

python 复制代码
# 使用range函数生成一个从100到999的整数序列
# 并将每个数字赋值给变量num
# range函数含前不含后,因此不包含1000
for num in range(100, 1000):
    # 通过整除运算符//将num除以100得到的商即为百位数字。
    hundreds = num // 100
    # 先将num除以10得到商,再对10取余得到十位数字
    tens = (num // 10) % 10
    # 通过对10取余运算得到个位数字
    ones = num % 10
    
    # 将百位、十位和个位数字的立方和与num进行比较
    # 如果相等,则说明该数是水仙花数
    if num == hundreds**3 + tens**3 + ones**3:
        print('%d是水仙花数。'% num)        

【终端输出】

复制代码
153是水仙花数。
370是水仙花数。
371是水仙花数。
407是水仙花数。

5. 判断一个数是不是水仙花数

python 复制代码
# def 语句定义一个名为sxh的函数
# 该函数接收一个参数num
# 自定义函数以英文冒号结尾
def sxh(num):
    # str函数将数字(num)转换为字符串类型,以便逐位处理    
    num_str = str(num)
    # 使用len()函数获取字符串num_str的长度,并赋值给变量n
    n = len(num_str)

    # 初始化变量sum为0,用于存储各个位上数字的n次方之和    
    sum = 0
    # 遍历字符串num_str中的每个字符,将每个字符赋值给变量i
    for i in num_str:
        # 将变量i转换为整数类型,并计算其n次方,然后加到变量sum上
        # 备注:sum = sum +int(digit) ** n
        sum += int(i) ** n
    
    # 判断变量sum是否等于参数num
    if sum == num:
        # 如果条件成立,返回True
        return True
    else:
        # 如果条件不成立,返回False
        return False

# 测试示例
num = 153
# 调用函数sxh()判断给定的数字是否为水仙花数
if sxh(num):
    # 如果是水仙花数,则打印出该数字是水仙花数
    print('%d是水仙花数。'% num)  
else:
    # 如果不是水仙花数,则打印出该数字不是水仙花数
    print('%d不是水仙花数。'% num)  

【终端输出】

复制代码
153是水仙花数。

6. 列表推导式

【语法】

python 复制代码
[表达式 for 迭代变量 in 可迭代对象 if条件表达式]

【代码示例】

python 复制代码
list4 = [ i for i in range(1,6)]
print(list4)

【终端输出】

复制代码
[1, 2, 3, 4, 5]

list4 = [i for i in range(1, 6)] 是一个列表推导式。

作用是创建一个包含从1到5的整数的列表。

具体来说,它使用了一个for循环来遍历1到5 。

并将每个遍历到的元素添加到列表中。

最终,list4 的值为 1, 2, 3, 4, 5

【代码示例】

python 复制代码
list5 = [ i**2 for i in range(1,6)]
print(list5)

【终端输出】

复制代码
[1, 4, 9, 16, 25]

计算输出0~5序列的所有数的平方。

【代码示例】

python 复制代码
# 定义字符串变量num_str,其值为'123'
num_str = '123'
# len函数计算字符串num_str的长度
# 此时n的值为3,因为字符串num_str包含3个字符
n = len(num_str)
# 使用列表推导式来计算每个字符的立方和
# 表达式为:int(i) ** n
# int(i)将每个字符转换为整数类型,然后求它的n次方
# for 循环遍历num_str,num_str是字符串类型
# 因此i也是字符串类型,用int 转换为整数才能参与计算
# n=3,1的立方是1,2的立方是8,3的立方是27
# sum()函数将所有立方值相加,并将结果赋值给变量s。
s = sum(int(i) ** n for i in num_str)
print(s)

【终端输出】

复制代码
36

列表推导式可参考如下链接:

90. Python列表推导式

6. 列表推导式判断一个数是不是水仙花数

python 复制代码
# def 语句定义一个名为sxh的函数
# 该函数接受一个参数num
# 自定义函数以英文冒号结尾
def sxh(num):
    # str函数将数字(num)转换为字符串类型,以便逐位处理
    num_str = str(num)
    # len函数获取数字的位数
    n = len(num_str)
    # 列表推导式计算每个位上数字的n次幂之和
    sum_of_powers = sum(int(digit) ** n for digit in num_str)
    # 判断结果是否等于原始数
    if sum_of_powers == num:
        return True
    else:
        return False
    
# 测试示例
num = 153
# 调用函数sxh()判断给定的数字是否为水仙花数
if sxh(num):
    # 如果是水仙花数,则打印出该数字是水仙花数
    print('%d是水仙花数。'% num)  
else:
    # 如果不是水仙花数,则打印出该数字不是水仙花数
    print('%d不是水仙花数。'% num)  

【终端输出】

复制代码
153是水仙花数。
相关推荐
叫我:松哥3 分钟前
基于Python的共享单车租赁数据分析与预测系统,技术栈flask+boostrap+随机森林+XGBoost
人工智能·python·深度学习·算法·随机森林·数据分析·flask
Jinkxs7 分钟前
Rust 性能优化全流程:从 flamegraph 定位瓶颈到 unsafe 与 SIMD 加速,响应快 2 倍
开发语言·性能优化·rust
Li#12 分钟前
web端电商项目自动下单发货评价晒图需要用到的能力
python·自动化
尘中远32 分钟前
Qt高性能绘图库QIm——实现二维三维科学绘图
开发语言·qt·信息可视化
雨辰AI32 分钟前
从零搭建大模型本地运行环境|Python+CUDA 基础配置避坑大全
大数据·开发语言·人工智能·python·ai·ai编程·ai写作
DogDaoDao42 分钟前
【第 05 篇】Python的字典与集合
开发语言·python·集合·字典
兰令水1 小时前
leecodecode【单调栈】【2026.6.12打卡-java版本】
java·开发语言·算法
涛声依旧-底层原理研究所1 小时前
混合检索 + 重排:让 AI Agent 拥有「既全又准」的认知骨架
人工智能·python
leagsoft_10031 小时前
零信任选型五刀法——零信任怎么选?五个问题,五条红线
开发语言·php
努力写A题的小菜鸡1 小时前
01-PyTorch加载数据初认识(dataset运用)
人工智能·pytorch·python