第九课课后作业:动动手:1 水仙花那道题答案有点看不懂,有没有大佬能帮忙讲下
for i in range(100, 1000):sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i) for i in range(100, 1000): #水仙花数指的是每个位置的三次幂之和等于其本身的三位数,因此range范围为100-1000
sum = 0 #定义sum = 0,满足水仙花数要求的数
temp = i #定义temp = i,当前range值
while temp: #创建循环,如果temp为真则重复循环
sum = sum + (temp%10) ** 3 #(temp%10) ** 3:temp余的三次幂
temp //= 10 # temp地板除10
if sum == i: #判断sum
print(i)
while循环里,经历了两次循环,拿第一个水仙花数153为例,进入循环时temp=153,sum=0,然后开始循环内运算,sum=0+(153%10)**3 = 0+3**3=27,temp//10=15;进入第一次循环,此时temp=15,sum=27,循环结束时sum=152,temp=1。。。。。。最终出循环时sum=153,此时sum等于本次for循环的range,因此输出sum。
最后的if判断是为了判断sum是否还是进入循环时的ramge值,如果是才满足水仙花数要求。
如i=101时,sum出while循环时sum值为2,2 != 101,因此不满足。 水仙花数特征 : 个位^3 + 十位^3 + 百位^3的和等于它本身
for i in range(100, 1000):# 限定范围100~1000
sum = 0 # 存放整数个位^3 + 十位^3 + 百位^3的和,并与该数比较
temp = i # 待证明的整数,用另一个变量存放,避免计算时的数值改变
while temp: #退出条件 当 temp = 0时
sum = sum + (temp%10) ** 3 # 计算 个位^3 + 十位^3 + 百位^3的和
temp //= 10 # 地板除 => 123 // 10 = 12; 12 // 10 = 1; 1//10 =0 跳出循环
if sum == i: # 判断是否为水仙花数
print(i)
页:
[1]