nsqwwp 发表于 2023-1-20 23:39:19

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

请问一下关于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)

ba21 发表于 2023-1-20 23:45:03

while 真/假:

while 非0/0: 真/假

tommyyu 发表于 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 不成立,循环退出。

wp231957 发表于 2023-1-21 09:28:05

while temp:这个语句和函数不沾边

hziyan 发表于 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怎么办{:10_282:}

nsqwwp 发表于 2023-1-22 15:06:13

tommyyu 发表于 2023-1-20 23:50
在 python 中,非 0 的数都是“真”,因此 while temp 就相当于 while temp != 0,会在 temp 不为 0 时一直 ...

感谢感谢,因为真的是0基础,学的好费力。我学到18课,今天又从头再复习一遍,感觉很容易忘记。

hziyan 发表于 2023-1-24 23:03:45

设个最佳答案吧{:10_250:}
好不容易有个懂的,虽然最佳答案不是我,
但是那个待解决看得真的很煎熬{:10_266:}
页: [1]
查看完整版本: 请问一下关于18讲的课后作业,动动手0《while temp》这个函数