鱼C论坛

 找回密码
 立即注册
查看: 2264|回复: 10

[已解决]关于水仙花数的问题求教

[复制链接]
发表于 2017-5-8 22:16:26 | 显示全部楼层 |阅读模式

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

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

x
问好大神

def Narcissus():
    for each in range(100, 1000):
        temp = each
        sum = 0
        while temp:
            sum = sum + (temp%10) ** 3
            temp = temp // 10  # 注意这里用地板除

        if sum == each:
            print(each, end='\t')

print("所有的水仙花数分别是:", end='')
Narcissus()

这串代码中
            sum = sum + (temp%10) ** 3
            temp = temp // 10  # 注意这里用地板除
这一部分无法理解到,还请指教
最佳答案
2017-5-10 08:44:52
liaozhenghao 发表于 2017-5-10 07:03
非常谢谢,理解了一部分,地板除那部分理解了,就是不断循环筛选成个位数,但是求余数那儿没有理解到,不 ...

举个栗子,369取余10就是9然后用9去运算,然后地板除法把369编程36,然后再取余 就是6,用6做运算
顺便回答另一个问题,只剩下个位数地板除10就是0,这就是要达到的目的,因为循环条件是这个变量,只有变量值为0才会停下来,编程中非零就是TRUE ,0就是False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-8 22:27:26 | 显示全部楼层
遇到问题先用搜索功能查一下看是否有相似问题别人已经回答过吧

比如看看下面两个帖子回答能不能帮到你
http://bbs.fishc.com/thread-47911-1-1.html
http://bbs.fishc.com/thread-84523-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 22:30:14 | 显示全部楼层
sum = sum + (temp%10) ** 3  分段理解
temp%10就是计算出个位数的值,然后求其3次幂,然后与旧的sum相加 形成新的值赋值给sum
temp = temp // 10
temp整除10,其实就是相当于去掉个位数,变成原先百位数和十位数组成的新十位数 赋值给temp
然后在下一次循环利用新的temp计算其个位数
这两句应该跟循环一起看的, 这三句的意思就是取出每一位数计算其3次幂加到总和中
还不懂可以提问

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
liaozhenghao + 3 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-10 07:03:33 | 显示全部楼层
lumber2388779 发表于 2017-5-8 22:30
sum = sum + (temp%10) ** 3  分段理解
temp%10就是计算出个位数的值,然后求其3次幂,然后与旧的sum相加 形 ...

非常谢谢,理解了一部分,地板除那部分理解了,就是不断循环筛选成个位数,但是求余数那儿没有理解到,不断选元素进行余数计算不知道如何理解,还请解惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-10 07:06:22 | 显示全部楼层
shuofxz 发表于 2017-5-8 22:27
遇到问题先用搜索功能查一下看是否有相似问题别人已经回答过吧

比如看看下面两个帖子回答能不能帮到你

地板除在循环到个位数以后再被//10,不会变成0吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 08:44:52 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
liaozhenghao 发表于 2017-5-10 07:03
非常谢谢,理解了一部分,地板除那部分理解了,就是不断循环筛选成个位数,但是求余数那儿没有理解到,不 ...

举个栗子,369取余10就是9然后用9去运算,然后地板除法把369编程36,然后再取余 就是6,用6做运算
顺便回答另一个问题,只剩下个位数地板除10就是0,这就是要达到的目的,因为循环条件是这个变量,只有变量值为0才会停下来,编程中非零就是TRUE ,0就是False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 09:02:28 | 显示全部楼层
liaozhenghao 发表于 2017-5-10 07:06
地板除在循环到个位数以后再被//10,不会变成0吗

会变成0呀,正是因为它变成零了才能退出那个while循环

求水仙花数不就是要把每位数字的立方加起来么
第一次while循环 求个位的立方
第二次求十位的立方
第三次求百位的立方,同时在第三次循环的时候 temp = temp//10 等于0了,所以就不在进行下一次循环(此时立方和的运算也已经完成了)

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
liaozhenghao + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-5-11 22:31:48 | 显示全部楼层
lumber2388779 发表于 2017-5-10 08:44
举个栗子,369取余10就是9然后用9去运算,然后地板除法把369编程36,然后再取余 就是6,用6做运算
顺便 ...

你好,还有一个问题,我不知道我是哪里出了问题,最后结果我的不出数字,我放上我的代码:

def lalala():
     for each in range(100,1000):
          temp = each
          sum = 0
          while temp:
                  sum += (temp % 10)**3
                  sum = temp//10

          if sum == each:
                  print(each,end='\t')

print("水仙花数分别是:",end='')
lalala()

我的答案运行就只显示:水仙花数分别是:
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-12 00:01:22 | 显示全部楼层
liaozhenghao 发表于 2017-5-11 22:31
你好,还有一个问题,我不知道我是哪里出了问题,最后结果我的不出数字,我放上我的代码:

def lalala ...

sum = temp//10
你的循环条件是temp 但是你这里改变的是sum的值 应该是temp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-12 09:30:59 | 显示全部楼层
lumber2388779 发表于 2017-5-12 00:01
sum = temp//10
你的循环条件是temp 但是你这里改变的是sum的值 应该是temp

哦哦,对哈,是我没仔细,谢谢你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 10:02:09 | 显示全部楼层
请问一下。为什么我这样写出来的结果只有一个?

for i in range(100,1000):
    temp = i
    x = 1
    while x:
        x -= 1
        if ((temp//100)**3)+((temp%10//10)**3)+((temp%100%10)**3) == i:
            print(i)



== RESTART: C:\Users\Administrator\Desktop\Python-pratice\lesson 10\求水仙数.py ==
407
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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