【Python】循环语句与分支语句

for···in循环

  • 迭代的对象是列表,即按顺序对列表里的各个元素执行程序
  • 迭代的对象是字典,即按顺序对字典里的各个键或值执行程序
  • 迭代的对象是字符串,即按顺序对字符串里的各个字符执行程序
for item变量名 in iterable可迭代的对象:
    do something  # 执行程序,缩进的程序都会被for循环迭代
for i in 'Python':
    print(i+'-',end='')
# P-y-t-h-o-n-
  • for下面运行的语句do something 必须要缩进,否则会报错

range函数

  • range(start,stop,step)
    start:计数从start开始,不写则默认从0开始
    stop:计数到stop结束,但不包括stop,注意啦!!
    step:步长,不写则默认为1
for a in range(0,10,1): 
for b in range(0,10):
for c in range(10):
    print(a)             #以上三种表示方法的打印结果一样

目标:新建命名为1月到12月的工作簿

import xlwt
for m in range(1,13):    #循环1到12次
    wb=xlwt.Workbook(encoding='utf-8')   #新建工作簿
    wb.add_sheet('统计表')      #工作簿里新建工作表
    wb.save('%d月.xls'%m)      #格式化命名并保存工作簿,

for···in嵌套循环语句

目标:完成九九乘法表的制作

for x in range(1,10):
    for y in range(1,1+x):
        print('%d×%d=%d'%(y,x,y*x),end='\t')   #%后面的元组按%前面字符串格式化
    print('')     #默认换行,每循环一次换行 
'''
1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81
'''

关于print的参数

print('123','456',sep='aaa',end='bbb')
print('123','456',end='bbb')
print('123','456',sep='aaa')
print('123','456')
'''
123aaa456bbb123 456bbb123aaa456
123 456

'''

Excel中的应用

目标:在excel中制作九九乘法表

import xlwt
wb=xlwt.Workbook(encoding='utf-8')   #新建工作簿
ws=wb.add_sheet('乘法表')   #新建工作表并命名
for x in range(1,10):       
    for y in range(1,x+1):
        ws.write(x-1,y-1,'%a×%a=%a'%(x,y,x*y))   #格式化
wb.save('九九乘法表.xls')    

while

  • i 满足条件一,则执行语句A,并继续判断i是否满足条件一,循环执行语句A;当 i 不满足条件,不执行语句A,直接跳出循环
i = 0   # 记得定义初始值
while i < 条件一 :   
	语句A
	i = i +1    # 记得递增变量i

案例

目标:打印列表的内容

list = ['h','q','r','t','y']
# 方法一:
for a in list:
    print(a)
# 方法二:
for i in range(len(list)):
    print(list[i])
# 方法三:
s = 0
while s < len(list):   # len(list) 求list长度,为5
    print(list[s])     # 索引从0开始 
    s = s +1

目标:将“test.xls”工作簿下的所有工作表名称写入“test1.xls”工作簿下的“表”。并且给每个工作表编写一个序号。

import xlrd,xlwt  #导入读取、写入模块
wb=xlrd.open_workbook(('test.xlsx'))   #打开工作簿
nwb=xlwt.Workbook(encoding='utf-8')  #新建工作簿
nws=nwb.add_sheet('表')  #新建工作表
n=0  #初始化变量0
while n<wb.sheets().__len__():   #当n小于工作表个数则循环 ;若wb.sheet_names(),则用for···in
    nws.write(n,0,'表%a'%n)  #将序号写入第一列
    nws.write(n,1,wb.sheets()[n].name)  #将工作簿下表名写入第2列
    n+=1  #变量加1
nwb.save('test1.xls')  #保存新建的工作簿

目标:制作九九乘法表

x,y=0,0  #初始化变量x,y
while x<9:  #当x小于9,则执行循环(外层循环)
    x+=1   #累加变量x的值为1
    while y<x:   #y小于x时,则执行循环(内层循环)
        y+=1  #累加变量y的值为1
        print('%a×%a=%a\t'%(y,x,x*y),end='')  #格式化九九乘法表
    y=0 #将内层变量初始化为0,方便下一次内层循环又从0开始
    print('')   #换行

'''
1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81	
'''

目标:新建2015年至2018年的工作簿文件,每个excel文件中再分别新建1到12月的工作表。

import xlwt
y=2015
while y<=2018:
    nwb=xlwt.Workbook()    # 有括号,说明是方法,没括号就是属性
    for m in range(1,13):  # 用for···in循环创建命名为1到12月的sheet方法1
        nwb.add_sheet('%a月'%m)
    nwb.save('%a年.xls'%y)
    y+=1
import xlwt
y,m=2015,1   #初始化y,m
while y<=2018:
    nwb=xlwt.Workbook()    
    while m<=12:     # while双循环,方法2
        nwb.add_sheet('%a月'%m)
        m+=1
    nwb.save('%a年.xls'%y)
    y+=1  # 累加变量
    m=1 # 把内层循环的m初始化(12变回1,继续下一次外循环)

if条件语句

基本语句

if conditional_test:
    do something      #条件成立时,执行,否则,忽略

嵌套条件语句

if 条件一:
	if 条件二:
		语句A
	else:
		语句B
else:
	语句C   # 当条件一为假,则执行语句C

多条件判断语句

if conditional_test1:
        do something1
    elif conditional_test2:  # 若条件2满足,则执行语句2,不会再判断条件3和执行语句3  
    	do something2
    elif conditional_test3:    
    	do something3
    else:
        do something4

目标:判断分数是否优秀

score=input('请输入分数:')   #输入要判断分数
score=int(score)  #将字符型数字转换成整数
if score>90:    #判断分数是否大于90分
    print('优秀')   #如果条件成立,则返回优秀
else:
    print('普通')

目标:将指定工作簿指定工作表下语文、数学两列成绩同时大于等于80的记录写入新工作簿。
成绩表.xls

import xlrd,xlwt #导入读取、写入模块
wb=xlrd.open_workbook('成绩表.xls')  #读取工作簿
ws=wb.sheet_by_name('分数表')  #读取工作表
nwb=xlwt.Workbook()
nws=nwb.add_sheet('筛选结果')

n,m=0,0 #初始化变量n,m
while n<ws.nrows-1:  #开始循环数据,(工作簿行数-1)以去除首行
    n+=1  #累加n变量作为读取单元格值时的行号
    if ws.cell_value(n,1)>=80 and ws.cell_value(n,2)>=80:
        m+=1
        nws.write(m,0,ws.cell_value(n,0))   #在m行1列写入筛选姓名
        nws.write(m,1,ws.cell_value(n,1))   #在m行2列写入筛选语文成绩
        nws.write(m,2,ws.cell_value(n,2))   #在m行3列写入筛选数学成绩
nws.write(0,0,'姓名')   #在1行1列写入姓名
nws.write(0,1,'语文')   #在1行2列写入筛选语文成绩
nws.write(0,2,'数学')   #在1行3列写入筛选数学成绩
nwb.save('筛选结果.xls')

筛选结果.xls
目标:判断成绩是否等级

score=int(input('请输入你的成绩:'))
if score>=90:
    print('优')
elif score>=80:
    print('良')
elif score>=60:
    print('中')
else:
    print('差')

目标:判断语文和数学两科目之和是属于哪个级别

import xlrd
from xlutils.copy import copy  #导入复制模板
wb=xlrd.open_workbook('成绩表.xlsx')
ws=wb.sheet_by_name('分数表')
nwb=copy(wb)  #复制读取工作簿
nws=nwb.get_sheet('分数表')
n=0
while n<ws.nrows-1:
    n+=1
    subtotal=ws.cell_value(n,1)+ws.cell_value(n,2)  #将语文和数学相加
    if subtotal>=180:
        nws.write(n,3,'优')
    elif subtotal>=160:
        nws.write(n,3,'良')
    elif subtotal>=120:
        nws.write(n,3,'中')
    else:
        nws.write(n,3,'差')
nws.write(0,3,'等级')
nwb.save('汇总表.xls')   #注意文件格式为xls,模块不支持写xlsx

汇总表.xls

  • 注意: n < ws.nrows - 1
while n < ws.nrows - 1:
    n += 1
    print(ws.cell_value(n, 1))
# 可执行
while n < ws.nrows:
    n += 1
    print(ws.cell_value(n, 1))
# IndexError: list index out of range
'''
设nrows=3
一共有三行
索引是0开始
所以这三行的索引是0,1,2
当n=3时,就超出索引范围了,因此报错
'''


break

目标:for···in中的break

for x in 'abcdefg': #遍历字符串
    if x=='d':   #如果遍历胡字符串等于d
        break    #跳出当前循环
    else:
        print(x,end='')  #打印结果:abc

while循环语句中的break

n=0   #初始化变量n
while n<=5:
    n+=1  #累加变量n
    if n==5:  #如n等于5
        break #跳出循环
    else:
        print(n)   #打印结果:1234

continue (跳出当次循环)

  • 当循环或判断执行到continue语句时,continue后的语句将不再执行,会跳出当此循环,继续执行循环中的下一次循环。
  1. for循环语句中的continue应用
for x in range(1,11):  #遍历1~11之间数字
    if x==5:
        print('我是五')
        continue #跳出当次循环,不再执行此句之后的语句,继续下一次for循环
    print(x)
#1234我是五
#678910
  1. while循环语句中胡continue应用
n=0
while n<6:
    n+=1
    if n==3:
        print('我是三')
        continue #跳出当次循环,不再执行此句之后的语句,继续下一次while循环
    print(n,end='')
#12我是三
#456

综合应用:
要求统计出业绩表中每个人的累计业绩大于等于800则达标,需要统计出开始达标的月份以及业绩

import xlrd #导入读取模块
from xlutils.copy import copy #导入复制模块
wb=xlrd.open_workbook(('业绩表.xls'))  #读取工作簿
ws=wb.sheet_by_name('sheet1')  #读取工作表
nwb=copy(wb)  #复制工作簿
nws=nwb.add_sheet('sheet2')  #新建工作表
subtotal,n=0,0
for r in range(1,ws.nrows):   #循环姓名/行
    for c in range(1,13):    #循环月份/列
        subtotal+=ws.cell_value(r,c)  #累加业绩数据
        if subtotal>=800:
            nws.write(r,0,ws.cell_value(r,0))   #将姓名写入单元格
            nws.write(r,1,'%d月份'%c)  #将月份写入单元格
            nws.write(r,2,subtotal) #将业绩写入单元格
            break  #退出当前循环
    subtotal=0  #重置变量
nwb.save('新业绩表.xls')

业绩表.xls_sheet1
业绩表.xls_sheet2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值