Sylvia.ending 发表于 2020-5-6 22:17:41

关于第六讲的课后练习爱因斯坦的难题

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


大家可以给我解释一下这个是什么意思嘛?为什么要设定i?flag又是什么东西呢?为什么不能是简单的:a%2==1,然后直接打印a?

kkk999de 发表于 2020-5-6 22:23:06

如果有原题目就更好了

Sylvia.ending 发表于 2020-5-6 22:56:56

我不知道怎样添加

liuzg123 发表于 2020-5-6 23:01:06

flag就是一个过渡,=0说明没有符合条件的值。等于1说明找到了一个值,后面才会输出。

pythonboy123 发表于 2020-5-6 23:46:10

首先说i,i在这里只是起到一个辅助作用,意在帮助你理解这个循环是怎么进行的,不是必须的,你直接将x作为循环变量进行循环也是可行的。
给你个范例:
x = 7
flag = 0
while x <= 700:
        if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
                flag = 1
                break
        x += 7
      

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


然后是flag,这是一个标志,初始值为0,循环中一旦出现满足条件的数flag就会变为1,因此循环结束后只需观察flag的值即可判断是否有符合条件的数。并且根据这个判断结果写出不同情况下的输出语句

sunrise085 发表于 2020-5-7 09:44:17

本帖最后由 sunrise085 于 2020-5-7 09:45 编辑

i和flag都可以不要
i只是为了每次房间直接将x加7
flag是个标记,一旦标记flag为1说明找到了,若循环结束后都没有找到,你们flag会一直为0,在循环外就会执行else语句
完全可以不进行标记,找到后就直接输出。

去掉i和flag的程序如下
x = 7
while x <= 700:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
      print('阶梯数是:', x)
      break
    x += 7 # 根据题意,x一定是7的整数倍,所以每次加7
else:
    print('在程序限定的范围内找不到答案!')

Sylvia.ending 发表于 2020-5-9 17:08:15

sunrise085 发表于 2020-5-7 09:44
i和flag都可以不要
i只是为了每次房间直接将x加7
flag是个标记,一旦标记flag为1说明找到了,若循环结束 ...

那while X<=700,700这个数字又是怎么来的呢?

sunrise085 发表于 2020-5-9 17:22:00

Sylvia.ending 发表于 2020-5-9 17:08
那while X

是根据你的程序中i<=100来的啊。
这不就是你要查找的范围么~

Sylvia.ending 发表于 2020-5-9 17:24:54

sunrise085 发表于 2020-5-9 17:22
是根据你的程序中i

我刚自己写了一下,明白了这个给出的范围。意思就是这个范围是自己定的。
谢谢哈!
页: [1]
查看完整版本: 关于第六讲的课后练习爱因斯坦的难题