江湖菜鸟 发表于 2021-1-5 12:50:22

python第六课的动动手第二题

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('在程序限定的范围内找不到答案!')

小甲鱼写的这个我没看明白怎么跳出循环的,来个大佬帮我解答一下,谢谢!{:9_241:}
我是这样写的:
x = 7
a= 1
while a == 1:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and(x%7==0):
      print(x)
      a = 2#如果我把这里换成“x = x + 1”,答案是有若干的,真正的答案应该是无解的,因为太多了,但第一个满足条件的数字是119.
    else:
      x = x + 1

昨非 发表于 2021-1-5 12:59:12

本帖最后由 昨非 于 2021-1-5 13:10 编辑

这是小甲鱼答案的解释:
x = 7
i = 1
flag = 0

while i <= 100:#循环变量是i,因为题目要找满足条件的最小x值,所以这里写成i<=1000000也是一样的结果,这个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的整数倍所以七个七个的跳着取值,之所以这么写,是为了减少一个一个比较的运算量(提高执行速度)
    i += 1
    #当i=17时,x=119,刚好是满足题目的最小值,此次循环中,执行if,标识符flag变为1,else不执行,所以之后的x值不变,一直为119
    #下次循环:i+=1,只执行if,x不变,直到i>100,跳出循环

if flag == 1:#根据标实符flag打印结果(仍为119)
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

你的答案:
x = 7
a= 1
while a == 1:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and(x%7==0):
      print(x)
      a = 2
    else:
      x = x + 1
#你的答案里,x本身是循环变量,循环条件由a的值来控制,答案是对的,只不过因为是一格一格比较的,运算次数是小甲鱼答案的七倍,
# 当然,程序简单,这点儿差异根本察觉不到

如果不限制只输出最小值的话,可以这么改:
x = 7
while 1:#死循环 (就不必用a来判断了)
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and(x%7==0):
      print(x)
    x = x + 1#不必加else分支,直接写在while循环里,缩进与if平级作为循环变量即可

    if x>1000:   #避免死循环,只输出前1000以内的符合条件的值
      break
测试结果为(1000以内):
119
329
539
749
959

江湖菜鸟 发表于 2021-1-5 13:13:17

昨非 发表于 2021-1-5 12:59


也就是说当i=17时满足了条件,但是还在执行i+=1此时X值没有变化,实际上i=18至i=101都执行了,当i=101时while后边的条件不满足,此时跳出循环体,开始执行if fiag ==1:的语句对吗{:9_237:}

昨非 发表于 2021-1-5 13:14:22

江湖菜鸟 发表于 2021-1-5 13:13
也就是说当i=17时满足了条件,但是还在执行i+=1此时X值没有变化,实际上i=18至i=101都执行了,当i=101时w ...

对的,直到x=119之后,i增加直到跳出while循环,x不随之变话了

昨非 发表于 2021-1-5 13:17:21

解释满意的话还请设置个最佳答案哈

江湖菜鸟 发表于 2021-1-5 13:19:14

昨非 发表于 2021-1-5 13:14
对的,直到x=119之后,i增加直到跳出while循环,x不随之变话了

谢谢,这下弄明白了,已设最佳{:9_217:}
页: [1]
查看完整版本: python第六课的动动手第二题