鱼C论坛

 找回密码
 立即注册
查看: 855|回复: 13

[已解决]水仙花问题

[复制链接]
发表于 2019-7-11 23:35:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def shui(x):
    sum=0
    while x:
        sum=sum+(x%10)**3
        x=x//10
        print(x)
        print(sum)
    if sum==x:
        print(sum+'是水仙花数')
shui(153)

这是我的想法,但是不知道为什么运行函数后,if语句是执行不出来的。
最佳答案
2019-7-12 10:36:33
另外针对你这个函数本身,我来说几句吧,你用whlie x,也就是x为False退出,也就是x为0,也就是x从153进入地板除到15在到1在到0结束循环,此时sum从0到27到152最后到153,你说0等不等于153嘛,等于就执行你那个if语句,不等那就永远不会执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-11 23:50:23 | 显示全部楼层
x=x//10  # while到最后x为0

sum=sum+(x%10)**3 # while到最后永远大于0

   if sum==x: #可能吗?????????????????????????
        print(sum+'是水仙花数')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 00:00:11 | 显示全部楼层
你告诉我1+'1'等于多少?,python不是弱类型,整数加字符串直接报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 08:41:36 | 显示全部楼层
ba21 发表于 2019-7-11 23:50
x=x//10  # while到最后x为0

sum=sum+(x%10)**3 # while到最后永远大于0

while 到最后X为0,所以循环结束
然后如果是水仙花数,就比如153,那么sum就会等于x的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 08:46:52 | 显示全部楼层
fan1993423 发表于 2019-7-12 00:00
你告诉我1+'1'等于多少?,python不是弱类型,整数加字符串直接报错。

print函数的第一个参数是收集参数,可以接收多个。那改成print(sum,'是水仙花数')
即便是未改之前也未报错。现在问题是无论你括号内是什么类型的,都无法显示出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 09:03:13 | 显示全部楼层
ba21 发表于 2019-7-11 23:50
x=x//10  # while到最后x为0

sum=sum+(x%10)**3 # while到最后永远大于0

我知道了 在我这个函数中X的值是不可以改变的,必须开辟另外一个值作为中间变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 09:12:05 | 显示全部楼层
你的问题在于你要检测的x
也就是对比的参照物每次都是不一样的数据
因此我干脆加了一个固定的数据,mix
然后进行判断,就可以了。
具体的代码如下:
  1. def shui(x):#传入x=153
  2.         mix=x #此时的mix是不变的,就是一个检验的数值,而且数值等于x。
  3.         sum=0
  4.         t=0 #这是计数的
  5.         while x:
  6.                 sum=sum+(x%10)**3
  7.                 x=x//10
  8.                 t=t+1
  9.                 print('这是第'+str(t)+'次的x='+str(x))   
  10.                 print('这是第'+str(t)+'次的sum='+str(sum))
  11.         if sum==mix: #在这里进行检验,判断就可以输出了。
  12.                 print(str(sum)+'是水仙花数')
  13. shui(153)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 09:44:29 | 显示全部楼层
PYthofreeze 发表于 2019-7-12 08:41
while 到最后X为0,所以循环结束
然后如果是水仙花数,就比如153,那么sum就会等于x的啊

sum就会等于x吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 09:46:50 | 显示全部楼层
while循环没有添加break的条件哦,相当于说你这个循环会一直持续,不会跳出来(除非x等于0,而你这里x是不会等于0的哇)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 10:27:29 | 显示全部楼层
PYthofreeze 发表于 2019-7-12 08:46
print函数的第一个参数是收集参数,可以接收多个。那改成print(sum,'是水仙花数')
即便是未改之前也未报 ...

你用print(sum,'水仙花数')没问题,但是中间用+号绝对报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 10:36:33 | 显示全部楼层    本楼为最佳答案   
另外针对你这个函数本身,我来说几句吧,你用whlie x,也就是x为False退出,也就是x为0,也就是x从153进入地板除到15在到1在到0结束循环,此时sum从0到27到152最后到153,你说0等不等于153嘛,等于就执行你那个if语句,不等那就永远不会执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 10:45:08 | 显示全部楼层
我按照你的思路改了下代码
  1. import copy
  2. def shui(x):
  3.     y=copy.copy(x)
  4.     sum=0
  5.     while x:
  6.         sum=sum+(x%10)**3
  7.         x=x//10
  8.     if sum==y:
  9.         print(f'{y}是水仙花数')
  10.     else:
  11.         print(f'{y}不是水仙花数')
  12. shui(153)
  13. shui(154)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 18:14:00 | 显示全部楼层
fan1993423 发表于 2019-7-12 10:45
我按照你的思路改了下代码

谢谢 我现在思路跟你一样 不过不需要引入copy这么麻烦,直接temp=x就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 21:09:21 | 显示全部楼层
PYthofreeze 发表于 2019-7-12 18:14
谢谢 我现在思路跟你一样 不过不需要引入copy这么麻烦,直接temp=x就可以了

嗯,是一样的,不过用copy更严谨些,你这个还没有变量里面有几层那种,有时候甚至要考虑deepcopy。我习惯了用copy对一个要求不变的变量赋值的写法。当然这道题你直接赋值就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 07:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表