fish初 发表于 2021-7-8 13:30:26

while后为真就可以吗

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):
    sum = 0
    temp = i
    while True:
      sum = sum + (temp%10) ** 3
      temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
      print(i)

为什么上面可以,下面不行?

fish_nian 发表于 2021-7-8 13:33:16

python中在循环里0为假,1为真,while True也可以表达为while 1,那么此时上面的代码中temp变量后面变为0即假就结束循环,第二个代码中while True一直是真也就结束不了

fish初 发表于 2021-7-8 13:39:33

fish_nian 发表于 2021-7-8 13:33
python中在循环里0为假,1为真,while True也可以表达为while 1,那么此时上面的代码中temp变量后面变为0即 ...

可是temp不可能为零
我试了下下面的代码,结果什么都没有

逃兵 发表于 2021-7-8 13:41:31

https://fishc.com.cn/forum.php?mod=viewthread&tid=192863&highlight=%CB%AE%CF%C9%BB%A8

fish_nian 发表于 2021-7-8 13:51:42

fish初 发表于 2021-7-8 13:39
可是temp不可能为零
我试了下下面的代码,结果什么都没有

temp会为0的,后面的if语句就是避免上面得数为0而不返回正确结果,你可以打印temp看

灰晨 发表于 2021-7-8 14:33:00

fish初 发表于 2021-7-8 13:39
可是temp不可能为零
我试了下下面的代码,结果什么都没有

temp为什么不可能为零
你看这代码,两个循环
第一次外循环(for),temp=i=100
进入内循环(while)
第一次内循环
temp //= 10=100//10=10
第二次内循环
temp //= 10=10//10=1
第三次内循环
temp //= 10=1//10=0
temp这不就等于0了吗
至此内循环结束
进行if语句,此时判断不成立不执行if语句
进行第二次外循环
temp = 101
...........
.........
......

fish初 发表于 2021-7-8 15:22:31

逃兵 发表于 2021-7-8 13:41
https://fishc.com.cn/forum.php?mod=viewthread&tid=192863&highlight=%CB%AE%CF%C9%BB%A8

谢谢您嘞

fish初 发表于 2021-7-8 15:23:08

灰晨 发表于 2021-7-8 14:33
temp为什么不可能为零
你看这代码,两个循环
第一次外循环(for),temp=i=100


谢谢您嘞
页: [1]
查看完整版本: while后为真就可以吗