注:该学习笔记是根据曾志贤老师编写的《从Excel到Python,用Python轻松处理Excel数据》所学习整理的笔记。
第三章 循环语句与分支语句
目录
一、for循环
1、for循环字符串
for i in 'python':
print(i)
2、for循环列数
for i in range(1,10,1) #正循环,正循环步长为1时可以不写,默认为1
print(i)
for j in range(10,1,-1) #反循环
print(j)
for k in range(10,1,-1)
print('-'+str(k)+'-') #由于变量是数字,与文字组合时,必须用str函数将它转换为字符串
案例一、for循环批量新建工作簿
import xlwt
for i in range(1,12+1):
nwb_name='{}{}'.format(i,'月.xls') #第一种写法
nws_name=str(i)+'月' #第二种写法
nwb=xlwt.Workbook('utf-8')
nws=nwb.add_sheet(nws_name) #工作表名引用循环的值
nwb.save('2022年\\'+nwb_name) #保存到该.py文件的子文件“2022年”下。注意\\才能识别为\
案例二、for循环的嵌套制作乘法表
import xlwt
nwb=xlwt.Workbook('utf-8')
nws=nwb.add_sheet('乘法表')
for i in range(1,10):
for j in range(1,i+1):
txt='{}X{}={}'.format(j,i,j*i)
nws.write(i,j,txt)
nwb.save('乘法表.xls')
注意缩进格式
二、while循环
1、while循环序列数
i=1
while i<10: #当i小于10时,进入循环,否则退出循环
i +=1 #对i进行累加
print(i)
2、while循环字符串
txt='python'
i=0
while i<len(txt) #使用len函数获取txt字符串的长度
print(txt[i]) #txt[i]为获取txt字符串第i位的字符
i +=1 #对i进行累加
案例一、while循环批量新建工作表
import xlwt
nwb=xlwt.Workbook('utf-8')
i=2010
j=2022
while i<j+1:
txt='{}{}'.format(i.'年')
nwb.add_sheet(txt)
i +=1
nwb.save('while循环批量新建工作表.xls')
3、while嵌套循环语句
i,j=0,0
while i<10:
while j<i+1:
print('{}X{}={}'.format(j,i,j*i),end='\t') #end='\t'表示制表符,每次打印回横向移动。
j +=1
i +=1
j=1
#while循环与for加range循环的区别在于内部j变量循环到false时,返回到上一级i循环并不会让j回到初始值。
#需要手动在上一级i循环中重置j循环为初始值,这就是这里的j=1的原因。
print()
案例二、while嵌套循环批量新建工作簿、工作表
import xlwt
i,j,k,l=2010,2022,1,12 #对4个变量进行赋值
while i<=j: #当i小于j时进入循环
nwb=xlwt.Worbook('utf-8') #新建工作簿
while k<=l: #当k小于l时进入循环
nwb.add_sheet('{}{}'.format(k,'月') #新建工作表,名为k月
k +=1 #对k进行累加
nwb.save('批量工作簿\\'+'{}{}'.format(i,'年.xls')
#当K循环结束时,保存工作簿,名为i年,存在当前.py文件的子文件夹“批量工作簿”内。
k=1 #将k恢复为初始值
i +=1 #对i进行累加
三、if条件语句
1、if条件语句及标准用法
if 100>=90: #当条件成立时,执行处理语句
print('成立')
if 100<=90: #当条件不成立时,不执行处理语句
print('成立')
案例一、if条件语句根据分数判断等级
A | B | C |
---|---|---|
姓名 | 分数 | 判断 |
甲 | 99 | |
乙 | 78 | |
丙 | 85 | |
丁 | 96 |
import xlrd #导入xlrd库
from xlutils.copy import copy #导入xlutils库中的copy模块中的copy函数
wb=xlrd.open_workbook('成绩工作簿.xls') #读取工作簿
ws=wb.sheet_by_name('成绩表') #读取工作表
col_val=ws.col_values(1) #获取指定列的值
nwb=copy(wb) #将读取的工作簿拷贝
nws=nwb.get_sheet('成绩表') #读取拷贝工作簿中的工作表
j=0 #赋值0,用作行号的累加
for i in col_val: #进行for循环,迭代器为获取的指定列的值
if type(i)==float and i>=90: #进行if判断,首先判断值是否为浮点数,并且值大于90
nws.write(j,2,'优秀') #在拷贝工作簿中的工作表的j行,C列填写“优秀”
j +=1 #对j进行累加
nwb.save('成绩工作簿-1.xls') #保存拷贝的工作簿,并另存。
2、if条件分支语句的标准用法和单行写法
#标准写法
if 100>=90: #当条件成立时,执行处理语句
print('成立')
else: #当条件不成立时,执行处理语句
print('不成立')
#单行写法
print('成立') if 100>=90 else print('不成立')
案例二、if条件分支语句对数字进行分类计数
lst=[95,89,69,100,88,94,91]
j,k=0,0
for i in lst:
if i>=90:
j +=1
else:
k +=1
print('大于等于90的共有{}个,小于90的共有{}个'.format(j,k))
3、if多条件分支语句标准用法
lst=[69,89,95,54]
for i in lst:
if i>=90:
print('优秀')
elif i>=80:
print('良好')
elif i>=60:
print('及格')
else:
print('不及格')
案例三、if多条件分支语句对分数进行等级判断
A | B | C |
---|---|---|
姓名 | 分数 | 判断 |
甲 | 95 | |
乙 | 83 | |
丙 | 62 | |
丁 | 54 |
import xlrd
from xlutils.copy import copy
wb=xled.open_workbook('成绩.xls')
ws=wb.sheet_by_name('成绩')
col_vals=ws.col_values(1)
nwb=copy(wb)
nws=nwb.get_sheet('成绩')
j=0
for i in col_vals:
if type(i)==float:
j +=1
if i>=90:
nws.write(j,2,'优秀')
elif i>=80:
nws.write(j,2,'良好')
elif i>=60:
nws.write(j,2,'及格')
else:
nws.write(j,2,'不及格')
nwb.save('成绩-1.xls')
四、break语句
1、break语句在while和for循环中的应用
i=0
#break语句在while循环中的使用
while True:
i +=1
print(i)
if i==5:
break
#break语句在for循环中的使用
i=0
for j in [98,85,93,97,88,96]:
if j>=90:
i +=1
print(i)
if i==5:
break
案例一、break语句标记达标时的首个月份
A | B | C | D | E | F | G | H | I | J | K | L | M | N |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
姓名 | 1月 | 2月 | 3月 | 4月 | 5月 | 6月 | 7月 | 8月 | 9月 | 10月 | 11月 | 12月 | 达标月份 |
甲 | 11 | 15 | 13 | 5 | 13 | 4 | 15 | 8 | 14 | 2 | 6 | 9 | |
乙 | 13 | 14 | 9 | 5 | 4 | 14 | 4 | 8 | 6 | 11 | 9 | 14 | |
丙 | 16 | 15 | 13 | 12 | 11 | 12 | 16 | 15 | 17 | 20 | 16 | 10 | |
丁 | 14 | 7 | 7 | 2 | 15 | 11 | 13 | 2 | 3 | 14 | 14 | 11 |
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('业绩.xls')
ws=wb.sheet_by_name('业绩')
ws_nrs=ws.nrows #获取最大行号
ws_ncs=ws.ncols #获取最大列号
nwb=copy(wb)
nws=nwb.get_sheet('业绩')
for row_num in range(1,ws_nrs): #从1行开始循环到最大行
num=0 #清空计数
for col_num in range(1,ws_ncs): #从1列开始循环到最大列
num +=ws.cell_value(row_num,col_num) #把定位的值进行累加
if num>=100: #当累加等于或大于100时
nws.write(row_num,13,ws.cell_value(0,col_num)) #将对应的月份输出到新工作表的对应位置
break #终止循环
nwb.save('业绩-1.xls')
五、continue语句
1、continue语句在while和for循环中的应用
#在while循环中的运用
num=0
while num<6:
num +=1
if num%2=0: #当num的余数为0时
continue #跳出当前循环,不执行以下语句
print(num)
#在for循环中的运用
for num in [90,85,99,78,100]:
if num<90: #当num的值小于90时
continue #结束当前循环,不执行下面的语句
txt='{}{}'.format(num,'优秀')
print(txt)
案例一、continue语句统计每次累计达标数
i,j=0,0
for num in [41,5,41,78,51,68,34,64,49,21]:
i +=num #对值进行累加
if i<100: #判断累加值是否小于100
print(i)
continue #满足if条件执行跳出本次循环,不执行下面的语句
j +=1 #对j进行累加
print('第{}次,累加大于等于100,值为{}'.format(j,i))
i=0 #重置i的值,重新进行累加