图图666 发表于 2021-1-9 22:45:21

关于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('在程序限定的范围内找不到答案!')这段求阶梯数的求大神解释一下,有点看不懂

jackz007 发表于 2021-1-9 22:54:04

本帖最后由 jackz007 于 2021-1-9 23:15 编辑

x = 7                  # 枚举变量 x 赋初值 7
i = 1                  # 循环变量 i 赋初值 1
flag = 0               # 找到标志初始化为 0 值

while i <= 100:          # 开始循环
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):# 判断 x 是否符合要求
      flag = 1                                             # 是,置找到标志为 1
    else:                                                      # 否则
      x = 7 * (i + 1)# 生成下一个 x 值                  
    i += 1               # 循环变量 i 的数值加 1

if flag == 1:            # 根据 flag 的值判断是否有找到这个 x
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')
      这个代码在开始循环前,先设置 x 的初始值为 7,i 为 1,找到标志 flag 为 0,并设置循环次数为 100 次,进入循环后,先判断 x 是否符合条件,如果不符合,那就生成新的 x 值,继续循环;如果符合,就置 flag = 1,继续循环,每次循环,循环变量 i 的值就加 1,当 i 等于 101 的时候,循环就到达终点。由于找到符合条件的 x 时,x 的值未被改变,所以,在后续的循环中,无论 i 值怎么改变,x 的值会始终保持不变(始终在 if 中转,不会执行到 else 中),直到循环结束。循环结束后,如果 flag 的值是 1,说明是找到了,如果维持原始值 0,那就说明没找到。
      改写一下更容易理解
c = 0
for x in range(7 , 701 , 7):
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
      print('阶梯数是:', x)
      c += 1
if c == 0:
    print('在程序限定的范围内找不到答案!')
   运行实况
D:\00.Excise\Python>python x.py
阶梯数是: 119
阶梯数是: 329
阶梯数是: 539

D:\00.Excise\Python>

      运行这个代码你会发现,其实,在指定的数值范围内,符合条件的阶梯数其实不止一个。

陈小东 发表于 2021-6-1 16:16:36

jackz007 发表于 2021-1-9 22:54
这个代码在开始循环前,先设置 x 的初始值为 7,i 为 1,找到标志 flag 为 0,并设置循环次数为...

for x in range(7 , 701 , 7):
上面这个的意思是循环对吧?但是目前貌似还没有学,
为啥填三个数字不是很明白

jackz007 发表于 2021-6-2 16:32:19

陈小东 发表于 2021-6-1 16:16
for x in range(7 , 701 , 7):
上面这个的意思是循环对吧?但是目前貌似还没有学,
为啥填三个数字不是 ...

      x 从 7 开始,循环到 701 结束,如果没有最后那个 7,那么,每次循环 x 的值增加 1,有了这个 7,每次循环 x 的值增加 7。就是说,循环中,x 的值将会依次等于 7、14、21、28........。
页: [1]
查看完整版本: 关于python第六讲