67193114 发表于 2022-3-4 20:05:32

新手求助!第六讲,课后作业。

不太明白示例中为什么满足第一个if条件flag=1后,while循环中止了?
2. 题目:请编程求解该阶梯至少有多少阶?
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 += 1

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

67193114 发表于 2022-3-4 20:07:09

自己编写的代码和显示结果如下:
x = 7
i = 1
while i <= 100:
    if (x%2==1) and (x%3==2) and (x%5==4) and (x%6==5):
      print('这个数是:',x)
      print('倍数为:',i)
    i+=1
    x=7*i

显示结果:
这个数是: 119
倍数为: 17
这个数是: 329
倍数为: 47
这个数是: 539
倍数为: 77

python爱好者. 发表于 2022-3-4 20:08:55

里面并没有终止呀,都是到最后统一进行判断是否找到答案的!
想终止可以加 break ,都一样的

python爱好者. 发表于 2022-3-4 20:11:18

67193114 发表于 2022-3-4 20:07
自己编写的代码和显示结果如下:
x = 7
i = 1


想只找到一个的话可以这样:
x = 7
i = 1
while i <= 100:
    if (x%2==1) and (x%3==2) and (x%5==4) and (x%6==5):
      print('这个数是:',x)
      print('倍数为:',i)
      break
    i+=1
    x=7*i

python爱好者. 发表于 2022-3-4 20:12:21

67193114 发表于 2022-3-4 20:07
自己编写的代码和显示结果如下:
x = 7
i = 1


想要只找到一个就终止的话可以这样:
x = 7
i = 1
while i <= 100:
    if (x%2==1) and (x%3==2) and (x%5==4) and (x%6==5):
      print('这个数是:',x)
      print('倍数为:',i)
      break
    i+=1
    x=7*i

isdkz 发表于 2022-3-4 20:15:01

本帖最后由 isdkz 于 2022-3-4 20:16 编辑

67193114 发表于 2022-3-4 20:07
自己编写的代码和显示结果如下:
x = 7
i = 1


实例里面的并没有终止,他只是因为满足一旦满足 if 条件后,

它就不会再进入 else 里面改变 x 的值,所以一直在 if 里面对 flag 赋值 1,

他那样子只能获取到 一个最小的满足条件的值,

你在示例代码中加个打印就知道循环并没有终止了。
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):
      print('in if')
      flag = 1
    else:
      x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
        print('in else')
    i += 1

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

你的代码就可以获取到多个满足条件的值。

67193114 发表于 2022-3-4 20:21:12

自己想明白了,还是谢谢了!!!

67193114 发表于 2022-3-4 20:32:28

isdkz 发表于 2022-3-4 20:15
实例里面的并没有终止,他只是因为满足一旦满足 if 条件后,

它就不会再进入 else 里面改变 x 的值 ...

是的是的,正如您说的。自己也刚刚看明白!十分感谢!

67193114 发表于 2022-3-4 20:34:09

python爱好者. 发表于 2022-3-4 20:08
里面并没有终止呀,都是到最后统一进行判断是否找到答案的!
想终止可以加 break ,都一样的

嗯嗯,是的!小白一枚,刚开始学。多谢!!!

YSW9527 发表于 2022-3-4 22:25:03

while并没有终止,只是满足了if语句以后,else就没有进去过了,所以x的值就没有变化了,但i的值一直在逐次加1到i是101的时候才跳出去

67193114 发表于 2022-3-5 10:51:02

YSW9527 发表于 2022-3-4 22:25
while并没有终止,只是满足了if语句以后,else就没有进去过了,所以x的值就没有变化了,但i的值一直在逐次 ...

是的是的,多谢指教!
页: [1]
查看完整版本: 新手求助!第六讲,课后作业。