午安打工人 发表于 2020-11-7 09:46:43

新人求助

求水仙花数时代码如下
for a in range(1,10):
    for b in range(0,10):
      for c in range(0,10):
            if a**3+b**3+c**3 == 100*a+10*b+c:
                print(a+b+c)
   输出的水仙花数中间带空格例如1 5 3
有什么好的解决办法吗
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和while temp >= 1:的效果相同是怎么做到的,或者说应该怎么理解while temp

qiuyouzhi 发表于 2020-11-7 09:52:22

在Python中,0是False,其他的数字都是True
while temp: 就相当于把temp的值取出来,如果不为0,就继续循环,否则退出循环
你可以把它理解为 while temp != 0:

昨非 发表于 2020-11-7 09:59:34

本帖最后由 昨非 于 2020-11-7 10:01 编辑

for a in range(1,10):
    for b in range(0,10):
      for c in range(0,10):
            if a**3+b**3+c**3 == 100*a+10*b+c:
                print(str(a)+str(b)+str(c))#转为字符串再拼接到一起就好了

地板除得到的temp依次是i的前两位,前一位,和0(此时跳出循环)
for i in range(100, 1000):#遍历100到1000所有整数
   sum = 0#定义求和变量,初值为0
   temp = i
   while temp:#当i得值不等于0时,一直循环
       sum = sum + (temp%10) ** 3 #temp取余10得到最后一位的数值,sum等于temp各位数之和
       temp //= 10         # 注意这里要使用地板除哦~   这里得到temp的前两位
   if sum == i: #判断i是否等于其各位数的三次方之和
       print(i)#打印满足情况的i得值

午安打工人 发表于 2020-11-7 10:03:15

qiuyouzhi 发表于 2020-11-7 09:52
在Python中,0是False,其他的数字都是True
while temp: 就相当于把temp的值取出来,如果不为0,就继续循 ...

谢谢大佬

午安打工人 发表于 2020-11-7 10:04:27

昨非 发表于 2020-11-7 09:59
地板除得到的temp依次是i的前两位,前一位,和0(此时跳出循环)

谢谢大佬

昨非 发表于 2020-11-7 10:05:28

午安打工人 发表于 2020-11-7 10:04
谢谢大佬

满意的话记得设为【最佳答案】哈

午安打工人 发表于 2020-11-7 10:11:17

昨非 发表于 2020-11-7 10:05
满意的话记得设为【最佳答案】哈

大佬,我还有一个问题 temp //= 10,是因为temp是整形所以除以10之后自动取整吗,还是我理解错//=的意思了

昨非 发表于 2020-11-7 10:14:20

午安打工人 发表于 2020-11-7 10:11
大佬,我还有一个问题 temp //= 10,是因为temp是整形所以除以10之后自动取整吗,还是我理解错//=的意思 ...

//=等价于temp=temp//10
意思就是对temp取地板除
地板除规定除以10下取整
页: [1]
查看完整版本: 新人求助