Python实现 — —水仙花数(一问多解)

在这次实例分享之前先祝自己生日快乐\\\٩( ‘ω’ )و ////


水仙花数(Narcissistic number)是指一个三位整数,其各位数字的3次方和等于该数本身。例如:abc是一个"水仙花数",则:a的3次方+b的3次方+c的3次方 = abc。

一.代码

1.用字符串切片去处理

for循环

for i in range(100, 1000):
    t = str(i)
    if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
        print(i)

在Python中通过range函数可以生成指定范围的整数序列,生成[100, 1000)区间的所有三位数,我们可以这么写:range(100, 1000)。因为我接下来要将水仙花数进行切片处理,所以要将i变成字符串的形式。这里我用的是pow()函数去分别让水仙花数的个位十位百位乘以三次方。其实这个代码省略了else,一般出现if就应该最少是双分支,不过这个代码省略了else也没关系,下面是完整的代码:

for i in range(100, 1000):
    t = str(i)
    if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
        print(i)
    else:
        continue

while循环

num=100
while num<1000:
    A = str(num)
    if int(A[0]) ** 3 + int(A[1]) ** 3 + int(A[2]) ** 3 == num:
        print(num)
        num += 1
    else:
        num+=1

这段代码和和上面的for循环逻辑是一样的,只不过把range(100,1000)改成了自加(num+=1),这段代码还把幂运算的方法改变了,把pow()函数变成了**。

2.用整除(//)和求余(%)来逐一计算出个位十位百位

for number in range(100, 1000):
    a = number % 10
    b = number // 10 % 10
    c = number // 100
    if a**3 + b**3 + c**3 == number:
        print(number)

这段代码和上面的逻辑是完全不一样的,不再是用字符串切片去对水仙花数操作,而是用计算的方法去算出个位十位百位,具体计算方法如下:

love = 521

# 计算百位数
number = love // 100	#双斜杠(//)代表整除,number = 5

# 计算十位数
love_0 = love % 100		#百分号(%)代表求余,初学者一定要把余数概念弄清楚,不要把余数和小数弄混,这里love_0 = 21
number = love_0 // 10	#number = 21 // 10 = 2

love_1 = love // 10		#love_1 = 52
number = love_1 % 10	#number = 2

# 计算个位数
number = love % 10		#number = 1

了解完如何逐一计算出个位十位百位后再去看代码就很清晰了,先计算出a(个位)b(十位)c(百位),再去运算比较是否是水仙花数。

二. 调整输出行数(变一行输出)

哈哈哈
这是上面三个代码的输出结果,但如果我不要用四行输出,我想用一行输出结果呢,你可以自己先自己尝试一下,下面我来告诉你怎么做。(这里拿第一段代码举例子)

1.空格分隔

在print中加函数end=" ",代码如下:

for i in range(100, 1000):
    t = str(i)
    if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
        print(i,end=' ')

下面是输出效果:
在这里插入图片描述

2.逗号分隔

字符串自加

这次用逗号来分隔输出结果,代码如下:

s=""
for i in range(100, 1000):
    t = str(i)
    if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
        s+="{},".format(i)
print(s[:-1])

我们先定义一个空字符串,然后让输出结果以字符串的形式自加,这和定义一个0,然后让输出结果自加是一样的。这里的一个细节就是在每次自加时就有一个逗号了,所以在输出时407后面还有一个逗号,这里采用s[:-1]方式不输出最后一个逗号。
下面是输出效果:
在这里插入图片描述

列表自加

s=[]
for i in range(100, 1000):
    t = str(i)
    if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
        s+=[t]
print(','.join(s))

方法三和方法二的输出结果是一样,这里就不展示了。
我先建立了一个空的列表,然后去存结果:

s = ['153', '370', '371', '407']

然后再采用字符串的.join()方法输出结果。

  • 15
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值