小白python课后练习求详细解释
题目:编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3
+ 5^3 + 3^3,因此 153 就是一个水仙花数
答案:
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之后的语句为什么要用这些运算方法
你好,同小白!
while之后就是一个自循环,temp不变成0就一直循环。目的就是将个位、十位和百位数的立方和相加。
带入一个例子说明吧:
当i=112时,temp=i=112, temp%10是112除以10的余数,也就是2,这一步是取出个位数,然后再**3,是将个位数立方,并且存在sum这个值中。
然后将112地板除以10,结果就是11,这时候temp也就变成了=11,并且因为还不是0继续带入while循环:
当temp=11时, temp%10是11除以10的余数,也就是1,这一步是取出十位数,然后再**3,是将十位数立方,并且加上之前个位数的立方值存在sum这个值中。
然后将11地板除以10,结果就是1,这时候temp也就变成了=1,并且因为还不是0继续带入while循环:
当temp=1时, temp%10是1除以10的余数,也就是1,这一步是取出百位数,然后再**3,是将百位数立方,并且加上之前个位数的立方值和十位数的立方值存在sum这个值中。
然后将1地板除以10,结果就是0,这时候temp也就变成了=0,并且因为是0所以跳出了while循环:
至此,sum就按照要求变成了个位十位和百位数字的立方和,再和原数i进行比较~如果相同就打印,不同则i=i+1,返回for循环
这就是整个循环中的一个例子~希望你能明白
小白想升级。希望能被采用,谢谢!
leon_xinxin 发表于 2020-4-8 02:19
你好,同小白!
while之后就是一个自循环,temp不变成0就一直循环。目的就是将个位、十位和百位数的立方和 ...
谢谢你的详细解释!
看明白了整个循环,总算知道%10是要取出个位数的值,只是还不懂为什么要用地板除,如果不用地板除的话还有其他方法可以解吗,我根本想不到要用地板除{:5_100:} 珍珠是认真的 发表于 2020-4-8 04:16
谢谢你的详细解释!
看明白了整个循环,总算知道%10是要取出个位数的值,只是还不懂为什么要用地板除, ...
//10这个地板除的目的是去除最后一位数,比如112会变成11,2131会变成213。
这个方法很有用的,就像是列表的pop()函数,踢出最后一个
可以看看我自己写的这个方法:
print('求 100~999 之间的所有水仙花数')
i=100
a=i//100 #百位
b=i//10-a*10 #十位
c=i-a*100-b*10 #个位
while i<1000:
if i==(a**3)+(b**3)+(c**3):
print(i)
i+=1
else:
i+=1
a=i//100 #百位
b=i//10-a*10 #十位
c=i-a*100-b*10 #个位
虽然也会用到地板除。。。但是少很多 print('求 100~999 之间的所有水仙花数')
i=100
a=i//100 #百位
b=i//10-a*10 #十位
c=i-a*100-b*10 #个位
while i<1000:
if i==(a**3)+(b**3)+(c**3):
print(i)
i+=1
else:
i+=1
a=i//100 #百位
b=i//10-a*10 #十位
c=i-a*100-b*10 #个位
leon_xinxin 发表于 2020-4-8 04:37
//10这个地板除的目的是去除最后一位数,比如112会变成11,2131会变成213。
这个方法很有用的,就像是列 ...
你真的是是小白吗,我们怎么差这么远,我都想不到用这些方法{:5_100:},太厉害了,谢谢你
页:
[1]