歪比巴步 发表于 2021-8-16 17:04:49

python课后作业答疑

为什么i=i+1不是放在else里面? 如果把它放到里面就会报错

答案程序
x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
      flag = 1
    else:
      x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
    i=i+1
   

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

wp231957 发表于 2021-8-16 17:16:23

那是因为无论if还是else   i都要自增

逃兵 发表于 2021-8-16 17:22:08

放在else里面不会报错,只是死循环而已

如果想写在else中,if里面也要写一个,满足无论进哪个条件i都会自增

x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
      flag = 1
      i=i+1
    else:
      x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
      i=i+1
   

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

白two 发表于 2021-8-16 19:23:16

本帖最后由 白two 于 2021-8-16 19:30 编辑

直接说进入循环后的流程吧:

第一次循环:i = 1, x = 7,执行 else , x = 14, i = 2
第二次循环:i = 2, x = 14,执行 else , x = 21, i = 3
总共执行16次,执行到第17次:
第十七次循环:i = 16, x = 112,执行 else , x = 119, i = 17
下一次循环,执行 if , flag = 1,此时 x = 119, i = 17,
如果 i+=1 写在 else 里面的话,那下一次循环依旧执行 if , i 依旧等于17,且会一直等于17,就会一直执行循环

非要把 i+=1 写在else里面的话,可以再 if 里面加一个 break ,满足条件就直接跳出循环
x = 7
i = 1
flag = 0

while i <= 100:
    if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5):
      flag = 1
      break
    else:
      x = 7 * (i + 1)# 根据题意,x一定是7的整数倍,所以每次乘以7
      i = i + 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

页: [1]
查看完整版本: python课后作业答疑