鱼C论坛

 找回密码
 立即注册
查看: 3104|回复: 19

[已解决]python入门第6课手动第二提有点搞不懂逻辑,求详解

[复制链接]
发表于 2016-7-25 17:53:11 | 显示全部楼层 |阅读模式
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):

        flag = 1

    else:

        x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7

    i += 1


if flag == 1:

    print('阶梯数是:', x)

如题以上:循环体部分不是很了解。if和else部分是不是分开的还是一起的,另外这个程序是不是在找出结果还是会循环100次。其中flag=1是什么意思

else:

    print('在程序限定的范围内找不到答案!')
最佳答案
2016-7-25 17:53:12
if和else部分是不是分开的还是一起的?
这是一个if分支结构,根据条件,条件成立进入到if里,不成立进入到else中

这个程序是不是在找出结果还是会循环100次?
是的。我的建议是在 flag = 1后面添加一句break,这样找到了符合要求的数之后就直接跳出循环,不再做没有意义的循环。

其中flag=1是什么意思?
作为标志位。flag初始值为0,所以如果一直没有符合条件的数的话flag则不变,为0。如果有符合条件的数,进入到if中,将flag置1,。最后跳出循环后,可根据flag的值来判断是否有符合条件的值

最佳答案

查看完整内容

if和else部分是不是分开的还是一起的? 这是一个if分支结构,根据条件,条件成立进入到if里,不成立进入到else中 这个程序是不是在找出结果还是会循环100次? 是的。我的建议是在 flag = 1后面添加一句break,这样找到了符合要求的数之后就直接跳出循环,不再做没有意义的循环。 其中flag=1是什么意思? 作为标志位。flag初始值为0,所以如果一直没有符合条件的数的话flag则不变,为0。如果有符合条件的数,进入到if中, ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-25 17:53:12 | 显示全部楼层    本楼为最佳答案   
if和else部分是不是分开的还是一起的?
这是一个if分支结构,根据条件,条件成立进入到if里,不成立进入到else中

这个程序是不是在找出结果还是会循环100次?
是的。我的建议是在 flag = 1后面添加一句break,这样找到了符合要求的数之后就直接跳出循环,不再做没有意义的循环。

其中flag=1是什么意思?
作为标志位。flag初始值为0,所以如果一直没有符合条件的数的话flag则不变,为0。如果有符合条件的数,进入到if中,将flag置1,。最后跳出循环后,可根据flag的值来判断是否有符合条件的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-26 09:21:28 | 显示全部楼层
shuofxz 发表于 2016-7-25 23:49
if和else部分是不是分开的还是一起的?
这是一个if分支结构,根据条件,条件成立进入到if里,不成立进入到 ...

但是题目的目标是符合if条件之后还要是7的倍数,而程序里的貌似没有体现出来啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-26 10:03:42 | 显示全部楼层
1324901134 发表于 2016-7-26 09:21
但是题目的目标是符合if条件之后还要是7的倍数,而程序里的貌似没有体现出来啊

x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
这行代码就体现了。而且x的初始值为7.

从开始x=7,若不符合if的条件,则进入到else里面,x=14,再继续下一次x=21……
也就是说从程序里面x压根就不可能取7的倍数以外的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-26 15:31:46 | 显示全部楼层
shuofxz 发表于 2016-7-26 10:03
x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
这行代码就体现了。而且x的初始值为7.

了解,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-26 15:42:35 | 显示全部楼层
flag这个返回值就是为了最后的一个条件满足后输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-30 20:14:17 | 显示全部楼层
我也学到这了,一起努力
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-31 08:29:37 | 显示全部楼层
n=7
i=1
while True:
    if (n%2==1) and (n%3==2)  and (n%5==4) and (n%6==5):
        print('阶梯数是:',n)
        break
    else:
        i+=1
        n=7*i

n是7的倍数,只用循环找7*i就行了,找到了,就跳出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-14 18:09:26 | 显示全部楼层
我学到这也有点问题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-18 16:46:42 | 显示全部楼层
flag 那个是在定义变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-21 20:04:56 | 显示全部楼层
根据flag参数判断是否在循环内还是外
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-22 23:18:15 | 显示全部楼层
讲真,还是没看懂……flag是个啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-22 23:33:24 | 显示全部楼层
明白flag是怎么回事了……跳出循环用的……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-27 17:08:46 | 显示全部楼层
注意while的意思,就是当while后面的条件成立的时候,就执行while下面的那一部分,一直循环下去,一旦发现条件不成立,立即跳出循环,开始执行下面的程序,也就是if flag==1那一部分的程序块。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-27 17:24:42 | 显示全部楼层
if 和 else是分开的,程序先判断 if 条件是否成立,是则跳过 else ,否则执行。
这个程序应会执行100次,因为不确定是否有多解。
flag = 1仅是一个赋值,为使下面程序继续运行创造条件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-27 20:43:58 | 显示全部楼层
flag 立个旗,也就是标志性变量
没有什么实际的意义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-27 20:45:47 | 显示全部楼层
同样有这个问题呢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-9 14:53:40 | 显示全部楼层
if 和else是一起的,然后第二个if是单独的,程序从第一个if开始依次往下运行,如果遇到某个x正好满足第一个if的条件,那么flag=1,此时,else就不会执行,开始下一次的while循环。循环结束后,第二个if就开始执行了,发现flag=1,于是就把符合条件的这个x打印出来了。
说白了,flag就是看看x是不是要的答案,用1表示是,用0表示否。

这个循环会执行100次,看看100的数里面有几个符合条件的,符合的都会打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-22 12:47:15 | 显示全部楼层
本帖最后由 leander 于 2016-9-22 12:50 编辑

x = 7
i = 1
flag = 0
while i <= 100:   #由于判定条件是i <= 100,所以会执行到i > 100为止
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):    #这个IF和下面的else属于while的循环体
        flag = 1     #给flag赋值,是为了在while循环结束后选择输出
    else:     #这个else和上面的IF属于while的循环体
        x = 7 * (i+1)   #对“X”重新赋值
    i += 1
if flag == 1:      #flag的作用是用来做判断选择输出的。
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

if可以单独使用,else必须和if配合使用(我记得是),else会和向上最近的if配对必须是同一个缩进,不会管下面的if,
flag  =  1,是为了在while循环结束后对输出内容进行选择,如果没有这个表达式做判断,那么再判断输出的时候,if的判断条件要写成(x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5),这样就会加大程序的运行时间。

是的,这个程序会在找到阶梯数之后会继续执行,必定执行100次,因为while的判断条件是 i <= 100

按照题目的意思,是要找出这个最小的阶梯数,在使用者角度那么这个程序是有BUG的
找到到该阶梯数之后,理应输出该数字,并结束程序

我对程序做了优化,
x = 7
i = 1
flag = 0
while  i <= 100 and flag == 0:      #增加判断条件,使得第一个if执行后就退出循环
    print (i)      #记录进入多少次循环,这个可以不要,那就更快
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag = 1      #要退出while循环可以在这个表达式下面加break也可以跳出循环,如果加break的话,while的循环条件可以改成i <= 100
    else:
        x = 7 * (i)      #对“X”重新赋值
        i += 1
if flag == 1:     #flag的作用是用来做判断选择输出的。
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

想知道一个while循环做执行多少次,可以像我改的那样。这样在测试的时候就能明确循环被执行多少次

还有就是700以内不只一个阶梯数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-16 18:34:25 | 显示全部楼层
其实这个程序没有循环100次,因为由题意就知道答案是7的倍数,
所以由7作为起点 ,步长为7, 终点为100,再根据其它条件去遍历得到答案
如果还没有弄懂,那就@我吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表