Python打卡第十天,跟着CSDN练习语法

# 打印出所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。
"""
例如, 153 是一个“水仙花数”,因为 153=1^3 + 5^3 + 3^3。
"""

注:水仙花数 的方法有很多,大家可以根据自己的思路来写这个案例,这是我目前为止遇到的一个办法最多的案例了。

 ①第一步,案例要求是找出三位数的所有 水仙花数 ,所以我们需要找出所有的三位数;

 ②第二步,根据水仙花数的要求,所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。所以我们要通过for循环遍历一个数的每一位,int整数类型是无法遍历到每一位的,所以我们要先把整数转换成str字符串(后面记得转换回来),后面的操作就顺其自然了。

# 打印出所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。
# 例如, 153 是一个“水仙花数”,因为 153=1^3 + 5^3 + 3^3。
new_list = []
for i in range(100, 1000):
    # 把所有的三位数存在一个列表里
    new_list.append(str(i))

# 把列表里的每一个数依次提取出来
for x in new_list:
    # 提取每个数的每一位
    a = int(x[0])
    b = int(x[1])
    c = int(x[2])
    if int(x) == a ** 3 + b ** 3 + c ** 3:
        print(f"所有的水仙花数:{x}")
    else:
        continue

结果:

所有的水仙花数:153
所有的水仙花数:370
所有的水仙花数:371
所有的水仙花数:407

注:我想到的只有这一种办法,案例源代码 有好多种方法,你又是哪一种呢?

# 方法一
start = 101
end = 999
for i in range(start, end + 1):
    # 计算百位上的数
    bai = i // 100
    # 计算十位、个位上的数
    shi, ge = (i - bai * 100) // 10, i % 10
    # 判断是否为水仙花数
    if ge ** len(str(i)) + shi ** len(str(i)) + bai ** len(str(i)) == i:
        print(i)

# 方法二
start = 1
end = 10 ** 7
for i in range(start, end + 1):
    sm = 0
    for j in str(i):
        sm += (ord(j) - 48) ** len(str(i))
    # 判断是否为水仙花数
    if sm == i:
        print(i)

# 方法三
a = [j for j in range(1, 10 ** 5)
     if sum([(ord(i) - 48) ** len(str(j)) for i in str(j)]) == j]
print(a)

 结果:

153
370
371
407
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474
54748
92727
93084
548834
1741725
4210818
9800817
9926315
[1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值