鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: xue11

[已解决]求助:关于For循环嵌套的理解

[复制链接]
 楼主| 发表于 2018-8-17 10:28:27 | 显示全部楼层
rodius 发表于 2018-8-3 22:50
1、楼主首先要明白for循环的规则,在for x in range(10)结构中,其意思是在for后面的语句段会循环运行10次 ...

for循环的规则哪里介绍的有,一直没有找到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-8-17 10:33:48 | 显示全部楼层
claws0n 发表于 2018-8-3 21:36
x 跑一次,y 跑十次。

一样,都是由上往下的。如果遇到循环,就会回到循环的开头。x 被执行后,遇到 y  ...

为什么X 跑一次,y 就要跑十次呢,什么原理啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-8-17 10:34:44 | 显示全部楼层
小甲鱼的二师兄 发表于 2018-8-3 21:32
循环嵌套是由内而外执行的,内部循环2执行完一圈,外部循环1递增1……

为什么是这样的,x 一次,y 运行十次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-18 15:27:19 | 显示全部楼层
源代码中加入一行打印,就可以看到结果了:
list1 = []
for x in range(10):                    #循环1
    for y in range(10):                #循环2
        if x%2 == 0:
            if y%2 != 0:
                list1.append((x, y))
print(list1)

结果是:
[(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-18 17:54:58 | 显示全部楼层
很好理解,代码是从上往下执行的,所以说肯定是外层先进去,然后再执行内层

x = 0 的时候,进入里边去执行内循环,要一直执行到内循环不满足条件退出为止。所以说 x = 0 的时候,内循环就执行了10次。当内循环不满足条件时,外层循环还是满足条件的,所以 x = 1。然后再进入内循环,内循环里边的值又被重新初始化了,所以它又执行了10次。所以总共执行了 10 x 10 = 100 次

最好的办法就是自己拿纸和笔写一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-18 20:55:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-19 11:59:31 | 显示全部楼层
调试一下,你就知道了,实践出真知
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-19 16:00:06 | 显示全部楼层
我也是初学者,我觉得从字面意义来理解就好了。
对于range(10)中的x,对于range(10)中的y,只要满足了下面两个条件就会将(x,y)添加到list1中。所谓运行顺序,应该是先循环1,x的每一个值都要运行10遍循环2,也就是总共要运行100遍找出所有组合。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-28 21:18:43 | 显示全部楼层
环境:循环A、循环B

文字解释:A执行10次循环,A的每一次循环执行10次B,最终会执行100次循环

图片详解:
       
ZWWSHRB)[QEI@BH5M59C9%D.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-28 21:53:46 | 显示全部楼层
学一下怎么用for循环打印一个九九乘法表就好啦。  
  1. for i in range(1, 10):
  2.     for j in range(1, i+1):
  3.         print(f'{i}x{j}={i*j}\t',end='')
  4.     print()
复制代码

感受一下,它是怎么打印的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-29 11:43:25 | 显示全部楼层
for()会自动地调用迭代器的 next()方法, 捕获 StopIteration 异常并结束循环。
嵌套循环时会先进入外层循环,调用next()方法获取例子中第一个值i=0,并执行内层循环,最终捕获 StopIteration异常结束内层循环,再次执行外层循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-30 10:20:26 | 显示全部楼层
本帖最后由 lovepythonfishc 于 2018-9-30 10:29 编辑

这就相当于有10个大箱子,每个大箱子里面又有10个小箱子,从中找出符合条件的!
list1 = []
for x in range(10):
    if x%2 == 0:
        for y in range(10):
            if y%2 != 0:
                list1.append((x, y))
print(list1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-30 12:18:18 | 显示全部楼层
先执行内循环前面的程序,再执行内循环,最后执行内循环后面的程序,再执行第二次外循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-4 10:52:12 | 显示全部楼层
x=1,y为1-10;考虑完这一遍以后;x=2,y=1-10,在循环走一遍。直到x=10,y=1-10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 21:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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