|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 离别ai殇 于 2018-1-30 06:33 编辑
小白最近在看零基础的视频,对第9讲水仙花课后题有点疑问,求助大家。
水仙花数是三个整数的平方和,要求打印出(100,1000)所有的水仙花数。
这是给出的答案。
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i)
从第一个数开始i=100, sum=0, temp=i=100, while 100: sum=sum+0, temp=10, if语句不满足,跳过。
然后是重新执行while语句吗,还是从i=101开始再执行?
还有就是问sum的语句,这是计算平方和的核心语句吗,temp除以10求余数是什么意思...
以及if语句判断sum=i?
因为循环顺序问题,就没有用100,101,102,103前几个数试验,希望大家不要喷我哈
我估计你感到困惑的应该是里面的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不是水仙花数
|
|