nuo_1124 发表于 2022-10-14 09:52:28

不懂就问:python作业中的问题,帮忙看一下。

先上代码:
steps = 7
i = 1
FIND = False

while i < 100:
    if steps % 2 == 1 and steps % 3 == 2 and steps % 5 == 4 and steps % 6 == 5 and steps % 7 == 0:
      FIND = True
      break
    else:
      steps = 7 * ( i+ 1)   # 为什么steps = steps * (i + 1)不行呢?
    i = i + 1

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

-------------------------------------------------------------------------------------------------------------------------------------
这是11讲的动手作业,问一下代码中的问题,steps初始已经被赋值了,和 i 一样。为什么 steps = steps * (i + 1) ,不行呢?

jackz007 发表于 2022-10-14 10:02:17

本帖最后由 jackz007 于 2022-10-14 10:26 编辑

      如果我们真的用
steps = steps * (i + 1)
      来产生下一个 steps,那么,当 steps = 7,i = 1 时,下一个 steps 的值是 steps = steps * (i + 1) = 7 * 2 = 14,那么,再下一个 steps 的值是 steps = steps * (i + 1) = 14 * 3 = 42,第三个 steps = steps * (i + 1) = 42 * 4 = 168 ...于是,我们得到的 steps:7、14、42、168, 而我们需要的 steps 却是 7、14、21、28...。虽然这样得到的 steps 同样也是 7 的倍数,但是,steps 之间的间隔已经不是固定值 7 了,而且,这个间隔会越来越大,会漏掉很多的 steps,这就是问题之所在。

      简单问题被复杂化了
FIND = False
for steps in range(7 , 700 , 7):
    if steps % 2 == 1 and steps % 3 == 2 and steps % 5 == 4 and steps % 6 == 5:
      FIND = True
      break

print('阶梯数是:', steps) if FIND else print('在程序限定的范围内找不到答案!')
页: [1]
查看完整版本: 不懂就问:python作业中的问题,帮忙看一下。