零基础学pyhone第九课课后作业问题
求水仙花数中sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦
这段代码看不懂啊
sum不是赋值0吗,temp是100之999间取值,比如我取一个值123
按第一段代码sum最后等于0加上,temp除10的余数,3的3次幂,等于9
水仙花数的计算,123不是应该1的3次幂,加2的3次幂,加3的3次幂,最后等于36
temp //= 10,得出整数12又是派什么用处呢
这两段代码怎么得到正确的水仙花数呢
完整的源代码:
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 = 12,又进入while循环, sum = 3的3次方 + 2的三次方。temp //= 10 = 1,然后又进入while循环,不然你以为这个while给来做什么的。 while循环不是结束了吗,不是应该再从for开始吗 我估计你感到困惑的应该是里面的while循环
while temp:
sum = sum + (temp%10) ** 3
temp //= 10
temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
(temp % 10) ** 3 表示这个数字的三次方,比如 2 ** 3 == 2 * 2 * 2 == 8
temp //= 10 表示temp右移1位,比如 123 // 10 == 12,234 // 10 == 23,地板除的意思是整除,只取整数部分而去掉小数部分
所以整个while循环的操作就是,拿temp=543举个例子
第一次循环
sum = 0 + 3 ** 3 = 9
temp = 54
第二次循环
sum = 9 + 4**3 = 9 + 64 = 73
temp = 5
第三次循环
sum = 73 + 5**3 = 73 + 125 = 198
temp = 0
第四次循环条件判定失败,跳出while循环,最终sum == 198
后续的判定中sum != 543
所以543不是水仙花数 qiyong51 发表于 2017-12-26 14:27
while循环不是结束了吗,不是应该再从for开始吗
while temp
第一个//后 是12while依然为真
以此类推最终将123 这三个数字分别取出来 **3
while temp:
sum = sum + (temp%10) ** 3
temp //= 10
比如你说的取数123,
第一步 while123:(进入循环)
sum = sum + (temp%10) ** 3=27(sum=0+3**3,temp%10相当于取123的个位数字)
temp//=10(此temp=12)
第二步 while12:
sum = sum + (temp%10) ** 3=35(sum=27+2**3,temp%10相当于取123的十位数字)
temp//=10(此temp=1)
第三步 while 1:
sum = sum + (temp%10) ** 3=36(sum=35+1**3,temp%10相当于取123的百位数字)
temp//=10(此temp=0)
第四步 while0:。。。。结束循环
页:
[1]