while循环语句的语法结构如图3-7所示。使用while循环语句,当while后面的条件表达式condition为真(True)时,执行while循环体内的do something语句;当条件表达式condition为假(False)时,退出循环。
图3-7 while循环语句的语法结构
● while是关键字,固定写法,不能有任何变化。
● condition是条件表达式,需要返回一个逻辑值True或False。
● “:”是关键字,可以理解为到此为止,后面不能再加任何代码,也是换行的标志。
● do something是while循环的处理语句,具体如何处理、代码如何编写要根据特定的需求而定。对处理语句必须做缩进处理,它不能与while关键字对齐。在PyCharm中不需要手工缩进,在“:”(冒号)后按Enter键,会自动做缩进处理。
要使用print函数在屏幕上循环输出数字101~104,可以使用for循环语句结合range(101,105)函数来完成。本节使用while循环语句一样可以完成,最后完成的效果如图3-8所示。
图3-8 循环序列数效果
案例代码如下所示,代码在“Chapter-3-6.py”文件中。
第1行代码 num=100 ,初始化num变量,其值为100,用于在while循环体中做累加赋值运算。
第2行代码 while num<104: ,判断num<104是否成立,如果条件成立,则执行循环体中的语句。
第3行代码 num+=1 ,对num变量每次加1,然后赋值给num变量。由于此行代码在循环体内,所以while循环体循环多少次就累加赋值多少次。
第4行代码 print(num) ,在屏幕上输出num变量的值。由于该行代码在循环体内,所以打印输出多少次取决于该循环体循环多少次。
要使用print函数将字符串'Python'中的每个字符逐个输出到屏幕上,除使用之前学习过的for循环语句外,还可以使用while循环语句,最后完成的效果如图3-9所示。
图3-9 循环字符串效果
案例代码如下所示,代码在“Chapter-3-7.py”文件中,
第1行代码 txt='Python' ,将字符串'Python'赋值给txt变量。
第2行代码 num=0 ,初始化num变量,其值为0。
第3行代码 while num<len(txt): ,如果num变量的值小于txt变量的字符个数,则执行循环体中的语句。因为txt变量对应的字符串是'Python',所以len(txt)的计数结果为6,实际上是判断num变量的值是否小于6。
第4行代码 print(txt[num]) ,提取字符串中指定位置的字符。实际上,txt[num]是字符串的切片表达方式,在第4章中会详细讲解。
第5行代码 num+=1 ,对num变量累加赋值,每运行一次这行代码,num变量就累加1。
本案例使用while循环语句新建2010—2019年的业绩表,完成后的效果如图3-10所示。
图3-10 2010—2019年的业绩表工作表
本案例代码如下所示,代码在“Chapter-3-8.py”文件中。
第1行代码 import xlwt ,导入需要用到的xlwt库。
第2行代码 wb=xlwt.Workbook('utf-8') ,新建一个工作簿并赋值给wb变量,此工作簿在循环新建工作表时使用。
第3行代码 year_num=2010 ,初始化year_num变量,其值为2010,可以将此值看作年份。
第4行代码 while year_num<2020: ,如果year_num变量的值小于2020,则执行while循环体中的语句。year_num变量从2010累加到2019,条件都成立。
第5~7行代码属于while循环体中的语句。第5行代码 txt='{}年业绩表'.format(year_num) ,将year_num变量格式化为工作表名称。第6行代码 wb.add_sheet(txt) ,用来新建工作表,并将txt变量的值作为新建的工作表名称。第7行代码 year_num+=1 ,对year_num变量进行累加,每次加1。
第8行代码 wb.save('Chapter-3-8-1.xls') ,当while循环结束后,执行工作簿的保存操作。注意,不要将此行代码放在while循环体中,否则循环一次就保存一次。
使用for嵌套循环语句可以制作乘法表,使用while嵌套循环语句也可以实现乘法表,最后完成的效果如图3-11所示。
图3-11 使用while嵌套循环语句实现乘法表的效果
本案例代码如下所示,代码在“Chapter-3-9.py”文件中。
第1行代码 x,y=0,0 ,分别初始化x变量和y变量,并且初始化的值均为0,实际上是x=0和y=0的简化写法。
第2行代码 while x<9: ,如果x变量的值小于9,则执行循环。
第3行代码 x+=1 ,对x变量累加1。
第4行代码 while y<9: ,如果y变量的值小于9,则执行循环。
第5行代码 y+=1 ,对y变量累加1。
第6行代码 txt='{}×{}={}'.format(y,x,x*y) ,x和y为两个乘数,x*y为乘积,将这3个数字格式化为乘法公式并赋值给txt变量。
第7行代码 print(txt,end='\t') ,在屏幕上输出txt变量的值,然后在后面添加制表符。
第8行代码 print() ,跳出内层while循环体,在外层while循环体中输出回车符。
第9行代码 y=0 ,在外层while循环体中将y变量的值重新设置为0,这样每次执行内层while循环语句时,y变量的值都是从0开始的。
本案例新建2015—2019年的工作簿文件,在每个工作簿中分别新建1~12月的工作表。本案例使用while嵌套循环语句完成,最后的效果如图3-12所示。
图3-12 批量新建工作簿、工作表的效果
本案例代码如下所示,代码在“Chapter-3-10.py”文件中。
第1行代码不再赘述。
第2行代码初始化year_num变量,其值为年份数字。
第3行代码判断什么时候可以执行循环。
第4~12行代码属于外层while循环的循环体,在循环体中新建了工作簿(第4、5行代码)、累加了年份数字变量(第6行代码)、初始化月份数字(第7行代码)、新建工作表(第8~11行代码)、保存工作簿(第12行代码)。