循环语句与分支语句
- 1、for…in循环语句基础
- 2、for…in循环语句应用(批量创建工作簿)
- 3、for…in嵌套循环语句
- 4、for…in嵌套循环语句应用(制作九九乘法表,写入Excel表格中)
- 5、while循环语句
- 6、while循环语句应用(读取工作簿信息到新表)
- 7、while嵌套循环语句
- 8、while嵌套循环语句应用(批量创建工作簿、工作表)
- 9、if条件语句
- 10、if…else条件语句
- 11、多条件if语句1(将筛选结果写入新工作簿)
- 12、多条件if语句2(根据总分判断等级)
- 13、break语句(跳出整个循环)
- 14、continue语句(跳出当次循环)
- 15、综合应用
1、for…in循环语句基础
- 我们遍历出来的每个元素、每个值,它会放在item这个变量里。
- 我们从这个集合iterable里面遍历出来的每一个值,都会放在item元素里面,然后对它逐个逐个的进行遍历处理。
2、for…in循环语句应用(批量创建工作簿)
3、for…in嵌套循环语句
以此类推。。。。。。
因为print默认结束符是换行符,所以为了使内层循环遍历完后再换行,我们可以写print()
,并使其跟外层for循环对齐:
4、for…in嵌套循环语句应用(制作九九乘法表,写入Excel表格中)
5、while循环语句
6、while循环语句应用(读取工作簿信息到新表)
7、while嵌套循环语句
- 通过调试寻找问题原因:
问题就是我希望的是,内层循环每次开始的时候,y的值是从0开始,而不是向上面所示的那样,y的值也跟着一直累计着;也就是,凡是我从外层循环进入到内层循环的时候,它的y值都应该重置成0,从0开始。
所以,当内层循环结束之后,要跳到外层循环的时候,就可以将y值重置成0。
- while嵌套循环跟for嵌套循环不一样,内层for循环结束后,进入外层for循环,然后再进入内层for循环的时候,内层for循环的那个控制变量会自动被重置为初值。
8、while嵌套循环语句应用(批量创建工作簿、工作表)
刚开始,你首先要知道把最基础的东西先建立起来,就是我们怎么样先把工作簿、工作表做好,然后再到它的外层去包裹循环语句,对我们初学者来说这样会更容易一些。
- 然后我们先来通过循环创建所要求的这几个工作簿,每个工作簿里面先只有一个工作表:
- 我们通过调试来找问题。
当调试运行到m的值为13的时候,此时已经不小于条件12了,就跳出了while内层循环。
这个时候你就会发现一个新的问题,由于m还是13,内层循环的条件表达式不成立,跳过内层循环去执行后面的保存,保存的时候就出问题了,F8单步就进入到:
问题就是,前面我们说过一个工作簿里面必须要有一个工作表,刚才创建了2016年工作簿的时候,但是由于m为13导致内层循环没有执行,没有运行创建工作表的内层循环循环体,没有创建工作表,这个工作簿没有工作表,你又在后面保存这个工作簿,就会出问题。
所以要在外层循环里面添加一个重置m的语句,让m重新从1开始。
其实这种批量创建工作簿、工作表,用for循环指定年份和月份的范围很方便,也不需要考虑将内层循环的控制变量还原成初始化的样子,也不需要做控制变量的累加,for循环会自动累加控制变量。
9、if条件语句
我们前面说过,这个input接收到的数据默认是字符串类型,所以我们需要用int函数来对这个变量进行转换,由原来的字符串类型的数字转换成真正的整数类型。
通过调试也能看到input获得的是字符串类型,然后我们把它转换成整数类型:
另外,除了单独用一个语句进行转换以外,既可以直接将input获取的内容进行整数类型转换,也可以在if条件比较之前对这个变量score进行转换:
10、if…else条件语句
11、多条件if语句1(将筛选结果写入新工作簿)
这里要注意,当if条件成立的时候,需要有一个累加值变量m用来方便的定位写入新簿新表中的行号,把m作为我们要写入的单元格的行号。
12、多条件if语句2(根据总分判断等级)
注意:下面的实例,是在原来的数据源上修改,而不是将数据写入一个新工作簿里面。
13、break语句(跳出整个循环)
- break只是跳出这个语句所在的循环语句,并不是跳出所有的循环语句。
- 看上图,我们想在连续几行print语句中间插入一条break语句,结果发现不能插入,没有break语句的智能提示,因为它就是专门针对虚幻语句来做的。
14、continue语句(跳出当次循环)
15、综合应用
- 要求统计出每位员工第一次达标的业绩所对应的月份,每位员工从1月到12月的累计业绩突破1000的月份,那个月份他的业绩是多少,他的姓名是什么。
如上图所示,就是到9月份刚好到1000了,到9月份是1097就开始达标了;就要逐个逐个的累加,当累加到了1000以后,我们就对应去选择对应的月份,以及他对应的是哪一个人。
其实,最核心的技术是,我怎样知道是哪个月份大于等于1000呢?
此时我们先不忙着复制我们这个工作簿,因为我们读取到这个工作表Sheet1之后,我就对这个工作表里面的数据读取出来进行循环。
这样就可以把每一行的数据都遍历出来了。
结果我们发现写入的内容不正确,怎么回事呢?因为我们得到>=1000的累计值后,程序仍然继续往后累计,累积的值仍然大于1000,所以就会循环着每次都写入统计结果表中,一直累计到12月。
我们只需要第一次达标的时候就可以了,后面的就不需要再循环了。
通过调试发现,我们找到第一个达标的9月份之后,内层循环仍然在继续循环、继续累计值,我们要在累积的值第一次大于等于1000的时候,在将对应的姓名、月份、业绩值写入单元格之后,加一个break,没必要让它再运行了,让内层循环跳出,继续执行下一行。