鱼C论坛

 找回密码
 立即注册
查看: 1669|回复: 10

[已解决]For 循环变量问题

[复制链接]
发表于 2018-3-15 16:25:08 | 显示全部楼层 |阅读模式

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

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

x
图片中for i in range(10)、第一个print(i)里的 i,与第二个print(i)里的 i 是互不影响的吗?为什么可以输出2 ,之后还会输出 1?
最佳答案
2018-3-16 04:02:18
因为 ‘i’ 在for循环里面和if条件语句中,两个语句不同层次,虽然后面是一个名字,但是存储在不同的空间,所以在for循环=2以后 符合if还能=1
for 循环_奇偶数.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-15 16:31:31 | 显示全部楼层
本帖最后由 tifa2018 于 2018-3-15 16:37 编辑

continue终止当前循环进行下次循环,break终止整个循环
这里可以看下i的变化
  1. for i in range(10):
  2.         print(i)
复制代码

输出结果
  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
复制代码

这里的i是从0一直到9都遍历一遍的

楼主的程序
i = 0时
跳过if i %2 != 0 :

直接执行i += 2
输出print("偶数",i)

i = 1时,执行if i %2 != 0 :
输出
print("奇数",i)
continue
终止当前循环进行下次循环
这里直接不执行下面的i += 2、print("偶数",i)语句
直接跳回for语句
开始i = 2
继续执行
以此类推

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

使用道具 举报

发表于 2018-3-15 16:41:06 | 显示全部楼层
第一个print(i)里的 i,与第二个print(i)里的 i 实际上就是一个 i ,

但是,我觉得吧你说他们相互影响和相互不影响,讨论的方面不同,结果也不同

他们本来就是一个 变量 i,所以可以说是影响的,但是呢,就代码实现输出功能来说又互不影响

这里的互不影响是因为continue的关系,遇到continue则终止此次循环,具体的如果不理解你可以百度

至于你说的为什么可以先输出2,后输出1,是因为,开始 i = 0,i%2 == 0,所以不满足 if 的条件

然后不进入if条件语句内,执行if后的i += 2,此时 i=2 ,然后print(i)

下一次循环开始执行for i in range(10),i = 1,然后满足if条件,所以输出1

continue语句执行后,直接进入下一次循环,执行for i in range(10),i = 2,然后依次执行下去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-15 16:43:13 | 显示全部楼层
tifa2018 发表于 2018-3-15 16:31
continue终止当前循环进行下次循环,break终止整个循环
这里可以看下i的变化

我想问的是,为什么输出(i =) 2之后,不是以(i =) 2进入循环,而是从(i =)1进入循环,for i in range(10)里的 i, 和第二个print(i)不影响吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 16:52:04 | 显示全部楼层
for i in range(10):
    print(i)
    i += 2

你试着执行上面这段代码,可以看到,循环体内对i的改变并不会影响下一次循环开始时i的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 16:52:29 | 显示全部楼层
墨瓶 发表于 2018-3-15 16:43
我想问的是,为什么输出(i =) 2之后,不是以(i =) 2进入循环,而是从(i =)1进入循环,for i in ran ...

for i in range(10),i 在每次进入循环后都会重置为上一次的值+1,和你在程序里修改没有关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 17:37:21 | 显示全部楼层
墨瓶 发表于 2018-3-15 16:43
我想问的是,为什么输出(i =) 2之后,不是以(i =) 2进入循环,而是从(i =)1进入循环,for i in ran ...

for循环
这里的i是从0一直到9都遍历一遍的
for循环这里是遍历
即这里的i 是自动加1的
  1. for i in range(10):
  2.         print(i)
复制代码


从这个输出结果你就可以看到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 17:39:19 | 显示全部楼层
不影响的,可以理解为最后两行是一起的,但是里面用的是上面的i。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 17:51:24 | 显示全部楼层
  1. for i in range(10):
  2.         if i %2 != 0 :
  3.                 print("奇数",i)
  4.                 continue
  5.         else:
  6.                 i += 2
  7.                 print("偶数",i)
复制代码


写成这样效果一样的,这样好理解一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-15 22:53:46 | 显示全部楼层
tifa2018 发表于 2018-3-15 17:51
写成这样效果一样的,这样好理解一些

谢谢回答啊,不过你的回答还是没解决我的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 04:02:18 | 显示全部楼层    本楼为最佳答案   
因为 ‘i’ 在for循环里面和if条件语句中,两个语句不同层次,虽然后面是一个名字,但是存储在不同的空间,所以在for循环=2以后 符合if还能=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 08:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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