Monsterccc 发表于 2020-5-3 23:23:38

Python课后练习009

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的值重新赋给temp,不重新赋值的话为什么程序运行不了?
num = 100
while True :
    thesum = 0
    temp = num
    while temp :
      thesum = thesum + (temp % 10)**3
      temp //= 10
    if thesum == num :
      print (num,end = " ")
      num += 1
    else :
      num += 1
      if num == 1000 :
            break
换成while的话这里的num如果不重新赋值给temp也会无限循环,为什么?

Twilight6 发表于 2020-5-3 23:29:53

本帖最后由 Twilight6 于 2020-5-3 23:35 编辑

看这代码应该是水仙花数吧。
for i in range(100, 1000):
    sum = 0
    temp = i# 因为水仙花数是要满足各位位数上的三次方的和等于它本身,所以这里要重新赋值
    while temp:
      sum = sum + (temp%10) ** 3
      temp //= 10          # 因为没有重新赋值的话 i 就会除以十后 改变了值
    if sum == i:            # 导致这边无法判断是不是等于本身
      print(i)
第二个代码也是同样的道理:
num = 100
while True :
    thesum = 0
    temp = num # 要先拿一个临时变量,拿去运算而不改变本身的值,因为本身后面还需要判断是否相等
    while temp :
      thesum = thesum + (temp % 10)**3
      temp //= 10# 就是这,临时变量的值会发生改变
    if thesum == num :# 如果你没用临时变量,会导致后面无法判断是否与本身相等
      print (num,end = " ")
      num += 1
    else :
      num += 1
      if num == 1000 :
            break

Monsterccc 发表于 2020-5-4 00:00:09

Twilight6 发表于 2020-5-3 23:29
看这代码应该是水仙花数吧。

第二个代码也是同样的道理:

原来是这样,感谢大佬😬😬😬
页: [1]
查看完整版本: Python课后练习009