鱼C论坛

 找回密码
 立即注册
查看: 1713|回复: 18

[已解决]请教python continue语句

[复制链接]
发表于 2017-9-19 14:53:04 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 694061755 于 2017-9-19 15:00 编辑

for i in range(10):
    if i % 2 != 0:
        print(i)                                        到这里输出为:1 3 5 7 9
                                                                       
        continue                             
    i += 2
    print(i)                                           到这里输出为:2 1 4 3 6 5 8 7 10 9   (当然都是竖排的,为了方便,改成这样了)
                                                  

上面13579是理解的,下面为何余数为0的都加2并打印,而余数不为0的没有加2,这个不理解。
  请问 能解释下原理吗?谢谢大家了!
最佳答案
2017-9-19 17:04:41
本帖最后由 流浪1123 于 2017-9-19 19:29 编辑
694061755 发表于 2017-9-19 15:33
for i in range(10):
    if i % 2 != 0:
       # print(i)

  1. for i in range(10):
  2.     if i % 2 != 0:
  3.        # print(i)
  4.         continue
  5.     i += 2
  6.     print(i)  
  7. print("================")


  8. for i in range(10):
  9.     if i % 2 != 0:
  10.         continue
  11.         print(i)
  12.     i += 2
  13.     print(i)  
  14. print("================")


  15. for i in range(10):
  16.     if i % 2 != 0:
  17.         continue
  18.         print("跳过")
  19.     else:
  20.         i += 2
  21.         print(i)  
复制代码

这三种方法是等价的。当然if else语句中if语句的执行语句不能为空。所以用这样print("跳过")代替。如果这里写上continue也是一样的。
  1. for i in range(10):
  2.     if i % 2 != 0:
  3.         print(i)
  4.     else:
  5.         i += 2
  6.         print(i)  
  7. print("================")

  8. for i in range(10):
  9.     if i % 2 != 0:
  10.         print(i)
  11.         continue
  12.     i += 2
  13.     print(i)  
复制代码

这两种写法也是等价的。而if else是执行if如果为真,则跳过else语句。
所以这也解释了,其实continue只是跳出本次循环。
360截图20170919173939950.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-19 15:08:11 From FishC Mobile | 显示全部楼层
continue是跳出本次循环,在单次循环体执行时,遇到continue不会继续执行后面的语句,直接进入下一次循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-19 15:11:00 | 显示全部楼层
左手十字 发表于 2017-9-19 15:08
continue是跳出本次循环,在单次循环体执行时,遇到continue不会继续执行后面的语句,直接进入下一次循环

这个我是知道的,书上就是这么写的!为何余数为0的都加2并打印,而余数不为0的没有加2,这个不理解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 15:14:03 From FishC Mobile | 显示全部楼层
余数不为零的跳过了continue下面的语句了,所以也就不执行i+=2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-19 15:33:48 | 显示全部楼层
左手十字 发表于 2017-9-19 15:14
余数不为零的跳过了continue下面的语句了,所以也就不执行i+=2

for i in range(10):
    if i % 2 != 0:
       # print(i)
        continue
    i += 2
    print(i)  
  我改成这样 输出的是:2 4 6 8 10,而中间有有print这句的话输出是2 1 4 3 6 5 8 7 10 9,这是为什么?谢谢了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 15:50:32 | 显示全部楼层
694061755 发表于 2017-9-19 15:33
for i in range(10):
    if i % 2 != 0:
       # print(i)

我来告诉你是怎么回事,对于 第一句 if  i %2 !=0 每次的 i 是 从range(10)里面取 ,下面的 i+=1 只会影响它下面的那个print(i) 对于 if 中的 i 是没有影响的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-19 16:09:08 | 显示全部楼层
foolwolf0068 发表于 2017-9-19 15:50
我来告诉你是怎么回事,对于 第一句 if  i %2 !=0 每次的 i 是 从range(10)里面取 ,下面的 i+=1 只会影 ...

不好意思,好像您答的不是我要问的。。。,不过还是谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-19 16:53:07 | 显示全部楼层
for i in range(10):
    if i % 2 != 0:
       # print(i)           -------> 这个地方!
        continue
    i += 2
    print(i)  
  中间一个print去掉就输出:2 4 6 8 10,而中间有print这句的话输出是2 1 4 3 6 5 8 7 10 9,感觉有点像2个print合并输出了,还是不理解,求解答?!谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 16:53:56 | 显示全部楼层
请准确理解“跳过本次循环“的含义
      如果循环中可以执行到continue语句,那么本次循环立即结束进入下一次循环,也就是说,循环体中子continue后面的所有代码都不会被执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 17:04:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 流浪1123 于 2017-9-19 19:29 编辑
694061755 发表于 2017-9-19 15:33
for i in range(10):
    if i % 2 != 0:
       # print(i)

  1. for i in range(10):
  2.     if i % 2 != 0:
  3.        # print(i)
  4.         continue
  5.     i += 2
  6.     print(i)  
  7. print("================")


  8. for i in range(10):
  9.     if i % 2 != 0:
  10.         continue
  11.         print(i)
  12.     i += 2
  13.     print(i)  
  14. print("================")


  15. for i in range(10):
  16.     if i % 2 != 0:
  17.         continue
  18.         print("跳过")
  19.     else:
  20.         i += 2
  21.         print(i)  
复制代码

这三种方法是等价的。当然if else语句中if语句的执行语句不能为空。所以用这样print("跳过")代替。如果这里写上continue也是一样的。
  1. for i in range(10):
  2.     if i % 2 != 0:
  3.         print(i)
  4.     else:
  5.         i += 2
  6.         print(i)  
  7. print("================")

  8. for i in range(10):
  9.     if i % 2 != 0:
  10.         print(i)
  11.         continue
  12.     i += 2
  13.     print(i)  
复制代码

这两种写法也是等价的。而if else是执行if如果为真,则跳过else语句。
所以这也解释了,其实continue只是跳出本次循环。
360截图20170919173939950.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 17:26:45 | 显示全部楼层
本帖最后由 流浪1123 于 2017-9-19 17:41 编辑
694061755 发表于 2017-9-19 15:33
for i in range(10):
    if i % 2 != 0:
       # print(i)

  1. for i in range(10):
  2.     if i % 2 != 0:
  3.         print('这里将打印一个1:',i)
  4.         print('再执行完break后退出')
  5.         break
  6.     i += 2
  7.     print('这里将打印一个2:',i)  

  8. print("================")
  9. for i in range(10):
  10.     if i % 2 != 0:
  11.         break
  12.         print(i)
  13.     i += 2
  14.     print(i)  

  15. print("================")
  16. for i in range(10):
  17.     if i % 2 != 0:
  18.         print(i)
  19.         break
  20.     i += 2
  21.     print(i)  
复制代码

这里如果是break的话,的情况
360截图20170919173022967.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-19 17:46:42 | 显示全部楼层
本帖最后由 694061755 于 2017-9-19 17:49 编辑

for i in range(10):
    if i % 2 != 0:
        print(i)               -------->这一句
        continue
    i += 2
    print(i)                  --------->还有这一句
                                 不好意思,我再问问,最终输出,是不是这2句合并的结果?1 3 5 7 9和2 4 6 8 10?也就是说continue终止了上一个循环同时跳过了13579,然后进入i+=2这个循环,也就是在02468的基础上各加2,最后是上下2个print合并输出了 2 1 4 3 6 5 8 7 10 9 ?  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 17:57:44 | 显示全部楼层
1 3 5 7 9,2 4 6 8 10没错啊,打印的时候加个记号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 17:57:45 | 显示全部楼层
694061755 发表于 2017-9-19 17:46
for i in range(10):
    if i % 2 != 0:
        print(i)               -------->这一句

是的 ,当 i是偶数时 执行下面的print,奇数时执行的是上面的print ,continue 跳过了下面的print
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-19 18:18:17 | 显示全部楼层
是不是可以这样理解:continue只是终止了上一个循环并去掉13579(开始下一个)但并没有去掉上面那个的print打印,于是上面和下面2个print合并输出了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 22:17:06 | 显示全部楼层
本帖最后由 流浪1123 于 2017-9-19 22:18 编辑
694061755 发表于 2017-9-19 18:18
是不是可以这样理解:continue只是终止了上一个循环并去掉13579(开始下一个)但并没有去掉上面那个的print ...


可以这样理解的,

1,3,5,7,9是当i=1,3,5,7,9时候产生的。这时因为print(i)在continue的上方。所以是打印了以后跳出循环的

而2,4,6,8,10是当i=0,2,4,6,8时产生的。执行第二个print(i)


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-20 08:00:25 From FishC Mobile | 显示全部楼层
694061755 发表于 2017-9-19 18:18
是不是可以这样理解:continue只是终止了上一个循环并去掉13579(开始下一个)但并没有去掉上面那个的print ...

正常描述已经不能让你明白怎么回事了,真的很头疼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-20 08:32:31 | 显示全部楼层
流浪1123 发表于 2017-9-19 22:17
可以这样理解的,

1,3,5,7,9是当i=1,3,5,7,9时候产生的。这时因为print(i)在continue的上方。所 ...

谢谢,非常感谢!!!
以前是弄网络的,现在想学点Python,对写程序不大懂,不好意思了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-20 09:24:30 | 显示全部楼层
694061755 发表于 2017-9-20 08:32
谢谢,非常感谢!!!
以前是弄网络的,现在想学点Python,对写程序不大懂,不好意思了。

有问题就提出来的,我也是刚刚学习的。相互帮助的。共同进步的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 04:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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