鱼C论坛

 找回密码
 立即注册
查看: 1853|回复: 4

[已解决]了不起的分支与循环最后一个程序不是很懂,请大佬们指点!

[复制链接]
发表于 2019-10-10 22:39:45 | 显示全部楼层 |阅读模式

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

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

x
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
这是怎么运算出来的,各位大佬们,求指教
最佳答案
2019-10-10 23:38:20
本帖最后由 angtn 于 2019-10-10 23:39 编辑

要搞懂这一题,需要了解continue它的作用是结束本次循环开启下一次循环,再开启下一次循环之前需要验证条件是否为真。
  1. for i in range(10):
  2.         if i % 2 != 0:# 如果i=0,因为0%2=0,所以这里不成立,跳过if执行 i += 2
  3.                 print(i)
  4.                 continue
  5.         i += 2  #i=0时候执行这里
  6.         print(i) # 第一个就打印2
复制代码

# i=1的时候,因为 1 % 2 != 0 所以打印结果为1,但是程序向下执行的时候,碰到了coninue,所以结束本次循环,所以下面的语句就不执行了。当i=2的时候,因为2 % 2 == 0,所以直接执行i += 2 所以这个就应该打印print(4)了。
# 所以这段程序的意思就是偶数的时候执行i += 2,奇数的时候执行if语句里面的print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-10 22:47:31 | 显示全部楼层
本帖最后由 jackz007 于 2019-10-10 23:00 编辑

      这个程序有个 continue 和 i += 2 障眼,其实,稍微改写一下,就好理解了。

      下面的代码和原代码在逻辑上完全相同:
  1. for i in range(10):
  2.    if i % 2 != 0:   # 如果 i 是奇数
  3.       print(i)      # 打印 i
  4.    else:            # 如果 i 是偶数
  5.       print(i + 2)  # 打印 i + 2
复制代码


       continue 是保证在 i 为奇数的时候,不会执行到 i += 2,而 i 为偶数的时候自然就会执行到 i += 2;

       i += 2 从表面上看,似乎是在对循环变量施加影响,其实,这只是假象,因为,for 循环对变量的赋值不受外界干扰,就是说,执行 i += 2 语句并不会影响到下一次循环对 i 的赋值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-10 23:27:57 | 显示全部楼层
首先i 在for循环中, 它的值是在range中取得。
即使在代码块中修改了,只是在代码块中变了。
当循环返回到头部时,仍然继续从range里取,代码块中的改变不会影响它的取值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-10 23:38:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 angtn 于 2019-10-10 23:39 编辑

要搞懂这一题,需要了解continue它的作用是结束本次循环开启下一次循环,再开启下一次循环之前需要验证条件是否为真。
  1. for i in range(10):
  2.         if i % 2 != 0:# 如果i=0,因为0%2=0,所以这里不成立,跳过if执行 i += 2
  3.                 print(i)
  4.                 continue
  5.         i += 2  #i=0时候执行这里
  6.         print(i) # 第一个就打印2
复制代码

# i=1的时候,因为 1 % 2 != 0 所以打印结果为1,但是程序向下执行的时候,碰到了coninue,所以结束本次循环,所以下面的语句就不执行了。当i=2的时候,因为2 % 2 == 0,所以直接执行i += 2 所以这个就应该打印print(4)了。
# 所以这段程序的意思就是偶数的时候执行i += 2,奇数的时候执行if语句里面的print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-10-11 08:50:19 | 显示全部楼层
非常感谢各位大佬们的简答,我也清楚这个程序是怎么运行以及执行步骤了。谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-20 03:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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