鱼C论坛

 找回密码
 立即注册
查看: 1923|回复: 4

课后作业009 了不起的分支和循环3

[复制链接]
发表于 2021-10-5 20:49:17 | 显示全部楼层 |阅读模式

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

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

x
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)


请问 temp //=10 是不是就等于 temp = temp//10

第一个循环    sum = sum + (temp%10) ** 3     不就等于 0 = 0 + (100%10) ** 3,  sum 还是为0, 然后temp 变成10 了,继续循环 ,sum还是为0,temp变成1了。 请问是这样吗? 如果是那后面怎么算,如果不是,请问哪里不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-5 23:25:07 | 显示全部楼层
本帖最后由 梁小烦恼 于 2021-10-5 23:29 编辑

和你一样是新手,也正好学到这,说说我的看法,它这里其实是两个循环,一个是for循环,一个是while循环,while循环是嵌套在for循环里面的,你上面的理解没有错,在第一次执行的时候,确实是你说的那样,在while循环中,第一次temp是100,第二次是10,第三次是1,第四次是0,跳出while循环执行if,发现sum!=i,进入下一个for循环,也就是temp=101的时候。又是4次while循环后,进入再下一个for训话,temp=102.
直到temp=153的时候,你代入算式,在temp=153时的第一个while,sum=0+(153%10)**3,也就是=27,接着temp//10 =15,sum= 9+(15%10)**3= 9+5**3 = 27+125 = 152,同样的,temp//10 = 15//10 =1,那么sum = 152 +(1%10)**3 =152+1=153。第4次while,temp小于0,跳出while,判断if,sum== i,打印,进入下一个for循环,也就是temp= 154,
这个一个我觉得算是优化过的数学模型了,我自己写的一个没有优化过的,很直接,你可以看看,我认为这道题你的问题在于这个数学模型的建立有疑问,语法和其他是没有问题的。
for i in range(100, 1000):
    while i:
        sum = (i//100)**3 + (i//10-(i//100)*10)**3 + (i-(i//10)*10)**3
        if sum == i:
            print(i)
            break
        else:
            break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-6 19:15:36 | 显示全部楼层
梁小烦恼 发表于 2021-10-5 23:25
和你一样是新手,也正好学到这,说说我的看法,它这里其实是两个循环,一个是for循环,一个是while循环,wh ...

谢谢解答,看了你的解释差不多懂了,不过还有一个问题 就是  1//10 和 1%10  这两个怎么计算? 结果都为0 吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 01:42:07 | 显示全部楼层
二十又几 发表于 2021-10-6 19:15
谢谢解答,看了你的解释差不多懂了,不过还有一个问题 就是  1//10 和 1%10  这两个怎么计算? 结果都为0 ...

//是取整,就相当于是我们小学没学小数前商多少余数多少  比如12//10 商就为1 余数是2  所以11//10结果为1
%是取余,在Python中是向下圆整,即远离0的方向,所以1//10为1    12%10为2     -12%10为8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 22:49:13 | 显示全部楼层
本帖最后由 梁小烦恼 于 2021-10-7 22:50 编辑
二十又几 发表于 2021-10-6 19:15
谢谢解答,看了你的解释差不多懂了,不过还有一个问题 就是  1//10 和 1%10  这两个怎么计算? 结果都为0 ...


共同学习,共同进步,//是除了以后取整啊,举个例子,6//4=6除以4等于1.5再取整数(相当于把小数点后的数字去掉)最后得到1,所以1//10=1除以10等于0.1再去掉小数点后的数字,那么就是0。
%就是取余数,你要知道一个数除以另一个比它大的数,它的余数就是它自己,所以1%10=1,再举几个例子
>>> 12%13
12
>>> 2%3
2
>>> 5%10
5
看明白了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 03:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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