鱼C论坛

 找回密码
 立即注册
查看: 4447|回复: 12

想问一下print(i)缩进对于结果到底有什么影响?

[复制链接]
发表于 2017-2-14 17:06:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码1:
for  i  in range(10)
        if i%2 !=0
                print (i)
                continue
        i +=2
        print (i)
运行结果是:
2
1
4
3
6
5
8
7
10
9
代码2:
for  i  in range(10)
        if i%2 !=0
                print (i)
                continue
        i +=2
print (i)
运行结果是:
1
3
5
7
9
9
我知道两段代码差在最后print(i)的缩进。但还是不懂缩进对于结果到底有什么影响?我怎么感觉都一样......对于代码1我理解,代码2我就不是很懂了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-14 17:49:10 | 显示全部楼层
本帖最后由 lumber2388779 于 2017-2-14 17:51 编辑

第一段代码,print加了缩进,那他就属于for的循环体,跟随着循环而打印
第二段代码,print没了缩进,会等到循环结束才执行一次
如果使用括号的话
第一段
for  i  in range(10)
{
        if i%2 !=0
                print (i)
                continue
        i +=2
        print (i)
}
第二段:
for  i  in range(10)
{
        if i%2 !=0
                print (i)
                continue
        i +=2
}
print (i)
python的缩进就是C语言里面的括号范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-14 20:39:53 | 显示全部楼层
根本原因是因为一个在循环体内,而另外一个在循环体外
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-14 22:00:49 | 显示全部楼层
lumber2388779 发表于 2017-2-14 17:49
第一段代码,print加了缩进,那他就属于for的循环体,跟随着循环而打印
第二段代码,print没了缩进,会等到循环 ...

还是不太懂。必须要把所有的if循环才能跳出循环体执行print吗?也就是i=0开始,不满足if循环,虽然加2之后变为2但是因为不能跳出循环体所以无法输出来?i=1因为满足if循环所以通过if循环体内的print输出来?以此类推,等到i=9时满足if循环通过循环体内的print输出第一个9,这时超出了for的范围通过循环体外的print输出第二个9?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-14 22:09:10 | 显示全部楼层
lumber2388779 发表于 2017-2-14 17:49
第一段代码,print加了缩进,那他就属于for的循环体,跟随着循环而打印
第二段代码,print没了缩进,会等到循环 ...

是不是同一行的属于平级关系,直到前一个执行不了再执行第二个,而如果缩进表示从属关系,执行了第一个就会紧接着执行第二个?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-14 22:12:53 | 显示全部楼层
lumber2388779 发表于 2017-2-14 17:49
第一段代码,print加了缩进,那他就属于for的循环体,跟随着循环而打印
第二段代码,print没了缩进,会等到循环 ...

我好像有点明白了。谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-14 22:13:34 | 显示全部楼层
^ambition 发表于 2017-2-14 20:39
根本原因是因为一个在循环体内,而另外一个在循环体外

谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 09:09:51 | 显示全部楼层
周黑鸭 发表于 2017-2-14 22:12
我好像有点明白了。谢谢。

举个例子吧
1   if a >0:
2       if a > 5:
3           a--
4           b=a
第2行加了2个缩进,而且第1句是往上离他最近的没有缩进的,那么第1句就是第2句的老大,第2句要听第1句的
第3,4行加了2个缩进,那么他们就是第2的下属了,他们要听第2句的
第3,4行是平级关系,但因为程序是顺序执行,所以会先执行第3然后再执行第4
你可以比成现实中的例子,第1是经理,管理着第2的部长,第2的部长管理着第3,4的科长,第3科长比第4先进来,所以有事会先找第3然后再找第4
语言组织还不是很好见谅,还有问题可以继续问我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 10:04:18 | 显示全部楼层
第二段的最后那个print(i)是在所有循环的外面,也就是说这个是在前面的循环走完了才直行的
1,3,5,7,9是第一个print(i)执行的,也就是打印所有的奇数
最后那个9是第二个print(i)执行的,那时候因为i+=2让i已经加到了最大,也就是9,所有最后打印一个9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 15:22:33 | 显示全部楼层
第2段代码,首先打印奇数出来,是因为第一个print()在if限制下,所以会打印符合条件的(奇数)
第二个print()的话,他和for一样缩进,多疑他根本就不在循环中,是指接下来要执行的一个语句,也就是打印i的最后状态而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 16:17:49 | 显示全部楼层
对,循环的逻辑会有很大影响!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 16:39:23 | 显示全部楼层
我也想问这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-16 11:16:05 | 显示全部楼层
缩进会把不满足条件的也给打印出来,没缩进就不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-9 07:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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