哪位师傅能给讲讲这段python代码啊,看半天了,都不太理解
本帖最后由 Lambertliu 于 2018-9-6 23:53 编辑for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10
if sum == i:
print(i)
特别是
这段
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 【水仙花数】
temp 一开始不为 0,所以会进入循环
sum 从 0 开始累加
temp%10 是把个位数给取出来 (153%10 = 3)
temp//10 是把个位数给删除 (153//10 = 15)
直到 temp == 0,跳出循环。后面用 if sum == i 判断 #解释如下:
for i in range(100, 1000): #这里进行循环,i 的取值为:100到999之间
sum = 0 #将0赋值给sum
temp = i #将 i 赋值给temp
while temp: #这里又进入一个循环,即当temp不为0的时候循环进行下面的语句(可以了解一下python中几种为False的情况)
sum = sum + (temp%10) ** 3 #这里给sum重新赋值,因为上面已经将 i 赋值给temp了,所以(temp%10)**3可以理解成 将 i %10 取模后立方
temp //= 10 #这里是简写,等于 temp = temp // 10, 将temp取模再次赋值给temp。 然后while循环进行判断temp的值,如果temp != 0,继续循环while里面的语句;如果temp == 0,退出while循环,进行下面的if语句
if sum == i:
print(i) 这段代码是解释水仙花数的,建议你论坛内搜一搜很多答案,附上一条大神的回答。while temp:
sum = sum + (temp%10)**3
temp = temp // 10
这段代码的作用,举例: temp 取值153,sum 的值为0,
第1次循环:
sum = sum + (temp%10)**3 # sum = 0+(3)**3
temp = temp // 10 # temp = 153//10 = 15
第2次循环:(此时,sum = 27,temp=15)
sum = sum + (temp%10)**3 # sum = 27+(5)**3
temp = temp // 10 # temp = 15//10 = 1
第3次循环: (此时,sum=152,temp=1)
sum = sum + (temp%10)**3 # sum = 152+(1%10)**3=152+(1)**3=153
temp = temp // 10 # temp = 1//10 = 0
第4次循环: (此时,sum=153,temp =0),注意,while temp: 等于 while 0:
0即是False,不再执行循环体。
总结: sum = sum +(temp%10)**3,这个式子是为了累积 以 temp为变量的值,每执行一次循环,累计一次,而 temp%10(取余,除以10,就是取末尾的数字),目标是把temp里的每一个数字都分别取出来;
temp = temp // 10,这个式子,是给sum = sum +(temp%10)**3, 提供可取余数的被除数。
以上内容来自此链接的最佳答案https://fishc.com.cn/forum.php?mod=viewthread&tid=121058&highlight=%CB%AE%CF%C9%BB%A8 Augustmoon 发表于 2018-9-7 09:21
#解释如下:
for i in range(100, 1000): #这里进行循环,i 的取值为:100到999之间
sum = 0 # ...
不太理解,为什么这样就求出 水仙花数了能说明下吗 小污堆 发表于 2018-9-7 15:24
这段代码是解释水仙花数的,建议你论坛内搜一搜很多答案,附上一条大神的回答。
以上内容来自此链接的最佳 ...
谢谢 我看看
页:
[1]