鱼C论坛

 找回密码
 立即注册
查看: 2913|回复: 6

[已解决]请问一下关于18讲的课后作业,动动手0《while temp》这个函数

[复制链接]
发表于 2023-1-20 23:39:19 | 显示全部楼层 |阅读模式

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

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

x
请问一下关于18讲的课后作业,动动手0《while temp》这个函数是什么意思,我做的时候是用sum < i ,但是得不到想要的数字是哪里有问题?
for i in range(100, 1000):
    sum = 0
    temp = i
   
    while temp:
        sum = sum + (temp % 10) ** 3
        temp //= 10
   
    if sum == i:
        print(i)
最佳答案
2023-1-20 23:50:31
本帖最后由 tommyyu 于 2023-1-21 12:08 编辑

在 python 中,非 0 的数都是“真”,因此 while temp 就相当于 while temp != 0,会在 temp 不为 0 时一直执行循环体内的语句。
第一句“sum = sum + (temp % 10) ** 3” 是累加最后一位数字的三次方,第二句 temp //= 10 是将 temp 的最后一位数字去掉。
比如 temp = 153,则运行过程是:
temp = 153,while temp 成立,执行循环内语句。
    sum = sum + (153 % 10) ** 3,sum = 0 + 3 ** 3 = 27
    temp //= 10,temp = 153 //= 10 = 15

temp = 15,while temp 成立,执行循环内语句。
    sum = sum + (15 % 10) ** 3,sum = 27 + 5 ** 3 = 152
    temp //= 10,temp = 15 //= 10 = 1

temp = 1,while temp 成立,执行循环内语句。
    sum = sum + (1 % 10) ** 3,sum = 152 + 1 ** 3 = 153
    temp //= 10,temp = 1 //= 10 = 0

temp = 0,while temp 不成立,循环退出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-20 23:45:03 | 显示全部楼层
while 真/假:

while 非0/0: 真/假
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-20 23:50:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 tommyyu 于 2023-1-21 12:08 编辑

在 python 中,非 0 的数都是“真”,因此 while temp 就相当于 while temp != 0,会在 temp 不为 0 时一直执行循环体内的语句。
第一句“sum = sum + (temp % 10) ** 3” 是累加最后一位数字的三次方,第二句 temp //= 10 是将 temp 的最后一位数字去掉。
比如 temp = 153,则运行过程是:
temp = 153,while temp 成立,执行循环内语句。
    sum = sum + (153 % 10) ** 3,sum = 0 + 3 ** 3 = 27
    temp //= 10,temp = 153 //= 10 = 15

temp = 15,while temp 成立,执行循环内语句。
    sum = sum + (15 % 10) ** 3,sum = 27 + 5 ** 3 = 152
    temp //= 10,temp = 15 //= 10 = 1

temp = 1,while temp 成立,执行循环内语句。
    sum = sum + (1 % 10) ** 3,sum = 152 + 1 ** 3 = 153
    temp //= 10,temp = 1 //= 10 = 0

temp = 0,while temp 不成立,循环退出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-1-21 09:28:05 From FishC Mobile | 显示全部楼层
while temp:这个语句和函数不沾边
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-22 09:48:06 | 显示全部楼层
首先Fasle可以粗略地看作0,
那么由于temp是个数字,只要temp不为0(不是False就是True嘛),
循环就一直进行,在这段语句中的意思是,

如果没有完全处理这个三位数的每一位数字(对一个数字进行地板除以10相当于把现在的个位裁去,比如156变15,15变1,1变0,此时处理完成,0又正好满足退出条件),否则不会退出循环

至于为什么不能用sum<i,要是有个数不是水仙花数,而且temp都没了sum还小于i怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-22 15:06:13 | 显示全部楼层
tommyyu 发表于 2023-1-20 23:50
在 python 中,非 0 的数都是“真”,因此 while temp 就相当于 while temp != 0,会在 temp 不为 0 时一直 ...

感谢感谢,因为真的是0基础,学的好费力。我学到18课,今天又从头再复习一遍,感觉很容易忘记。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-24 23:03:45 | 显示全部楼层
设个最佳答案吧
好不容易有个懂的,虽然最佳答案不是我,
但是那个待解决看得真的很煎熬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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