Python入门:对Excel数据处理的学习笔记【第三章】循环语句与分支语句

注:该学习笔记是根据曾志贤老师编写的《从Excel到Python,用Python轻松处理Excel数据》所学习整理的笔记。

第三章 循环语句与分支语句

Python中的for循环语句可以遍历任何序列项目,比如字符串、列表、元组、集合等。

一、for循环

1、for循环字符串

for i in 'python':
	print(i)
  • for:关键字(代表开始自循环)
  • i:变量
  • in:关键字
  • ‘python’:迭代器(理解为循环内容)
  • ::关键字(代表到此为止)
  • 第二行首缩进四个空格,Python对格式要求非常严格。

2、for循环列数

range函数
语法结构:
range(start,stop[,step])
参数说明:

  • start:表示起始值,默认从0开始。
  • stop:表示终止值,但不包括宗旨值。(左闭右开)
  • step:步长,默认为1。
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循环

while循环的基本逻辑是:当条件为真(true)时,执行循环内的语句。当条件为假(false)时,退出循环。

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循环批量新建工作表

批量新建以2010年到2022年的年份命名的工作表。

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嵌套循环语句

利用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嵌套循环批量新建工作簿、工作表

批量新建以2010年至2022年的年份命名的工作簿,并且每个工作簿中批量新建以1月至12月命名的工作表。

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条件语句根据分数判断等级

对“成绩工作簿”中的“成绩表”中的分数大于90分的输出“优秀”,并输入单元格C列,另存。

在这里插入图片描述

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条件分支语句对数字进行分类计数

统计[95,89,69,100,88,94,91]列表中数字大于或等于90的个数和数字小于90的个数。

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多条件分支语句标准用法

对[69,89,95,54]数字进行等级划分判断,>=90优秀,>=80良好,>=60及格,<60不及格。

lst=[69,89,95,54]
for i in lst:
    if i>=90:
        print('优秀')
    elif i>=80:
        print('良好')
    elif i>=60:
        print('及格')
    else:
        print('不及格')
案例三、if多条件分支语句对分数进行等级判断

对“成绩”工作簿中的“成绩”工作表中的分数进行判断,>=90优秀,>=80良好,>=60及格,<60不及格。并输入单元格C列,另存。

在这里插入图片描述

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语句

break语句用于终止循环。当while循环条件中没有false,或者for循环没有被全部循环完时,可以使用break语句终止循环。可以给break语句设置条件,当条件成立时运行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语句标记达标时的首个月份

如下图,在“业绩”工作簿中的“业绩”工作表,查找每个人在12个月中,业绩累计达到100时,对应的是哪个月。

在这里插入图片描述

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语句

break语句用于终止整个循环,
continue语句用于终止整个循环中的某次循环。
如果在循环体重执行了continue语句,则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语句统计每次累计达标数

将列表[41,5,41,78,51,68,34,64,49,21]中的值累加>=100时,标记出来,重新累计,以此类推。

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的值,重新进行累加
<think>嗯,用户之前问过怎么提高编程能力,现在又想让出一些编程题。看来他们可能已经按照之前的建议开始学习了,现在需要具体的练习题目来巩固和应用所学的内容。需要先确定用户的编程水平和熟悉语言,但用户这次没有说明,所以得提供分层次的题目,覆盖不同难度和常见领域。 首先,用户可能是初学者或者有一定基础的学习者,需要从基础开始逐步提升。基础题应该包括变量、循环、条件语句这些,比如斐波那契数列、字符串处理。然后中级题可以涉及算法和数据结构,比如链表、排序算法,还有简单的系统设计,如库存管理系统。高级题可能需要更复杂的算法和实际应用,比如并发编程或爬虫。 另外,用户可能对某些特定领域感兴趣,比如Web开发、数据处理,或者算法。所以题目最好涵盖多个方向,让用户可以选择自己感兴趣的领域练习。同时,项目型题目能帮助用户综合运用知识,比如实现计算器或简易数据库,这样能锻炼整体项目构建能力。 还要注意题目的实际应用性,比如自动化办公或数据分析,这样用户在做题时能有成就感,解决实际问题。同时,推荐一些刷题平台,方便用户自主练习,比如LeetCode或Codewars。 需要确保题目描述清晰,有示例输入输出,这样用户能明确题目要求。此外,可以提示用户根据当前水平选择题目,逐步挑战更难的任务,避免挫败感。最后,鼓励用户坚持练习,参开源项目,保持学习的持续性。</think>当然可以!以下是一些分难度、分领域的编程练习题,涵盖基础语法、算法、实际应用等方向。你可以根据自己的编程水平和兴趣选择练习—— --- ### **一、基础语法巩固题**(适合入门) 1. **字符串处理** - 输入一个字符串,统计其中元音字母(a, e, i, o, u)出现的次数(不区分大小写)。 - 示例输入:`"Hello World!"` → 输出:`3` - 扩展:统计每个元音字母的单独出现次数。 2. **数值计算** - 实现斐波那契数列的第n项计算(递归和循环两种方法)。 - 进阶:优化递归版本的时间复杂度(如通过缓存或尾递归)。 3. **文件操作** - 读取一个文本文件,统计其中每个单词的出现频率,输出频率最高的前10个单词。 - 扩展:忽略大小写和标点符号。 --- ### **二、算法数据结构题**(适合中级) 1. **链表操作** - 实现单链表的反转。 - 进阶:在O(n)时间内、O(1)空间复杂度下完成。 2. **树图** - 实现二叉树的层次遍历(广度优先),并输出每层的节点值。 - 示例输入: ``` 3 / \ 9 20 / \ 15 7 ``` → 输出:`[[3], [9,20], [15,7]]` 3. **动态规划** - 背包问题:给定物品重量列表和背包容量,求能装入的最大重量。 - 进阶:完全背包问题(物品可重复选择)。 --- ### **三、实际应用题**(结合场景) 1. **数据处理** - 给定一个CSV文件(含学生姓名、成绩),计算每个学生的平均分,并输出高于班级平均分的学生列表。 - 扩展:支持从命令行参数读取文件路径。 2. **网络请求** - 调用公开API(如天气API、GitHub用户信息API),获取数据后解析并输出关键信息。 - 示例:输入GitHub用户名,返回该用户仓库数量及最近一次提交时间。 3. **并发编程** - 实现一个多线程下载器:将一个大型文件分割为多个块,通过多线程并行下载后合并。 - 进阶:支持断点续传。 --- ### **四、系统设计题**(综合能力) 1. **简易库存管理系统** - 功能:支持商品增删改查、库存预警(低于阈值时提醒)、销售记录导出为Excel。 - 要求:使用数据库(如SQLite)持久化数据。 2. **命令行计算器** - 支持加减乘除和括号优先级(如 `3 + (5 * 2)`),通过字符串解析实现运算逻辑。 - 实现一个将简单算术表达式(如 `2 + 3 * 4`)转换为抽象语法树(AST)的解析器。 - 进阶:生成中间代码(如三地址码)。 --- ### **五、趣味挑战题**(锻炼思维) 1. **迷宫求解** - 给定一个二维矩阵表示的迷宫(0为通路,1为墙),找到从起点到终点的最短路径。 - 进阶:支持动态随机生成迷宫。 2. **文本冒险游戏** - 用命令行实现一个交互式故事游戏,根据用户选择触发不同剧情分支。 - 示例:玩家通过输入命令探索房间、解谜逃脱。 3. **图像处理** - 将彩色图片转换为灰度图(使用Python的PIL库或JavaScript的Canvas)。 - 扩展:添加滤镜效果(如高斯模糊、边缘检测)。 --- ### **六、开源/项目型题目** 1. **实现一个简易Redis** - 支持基本命令(SET/GET/DEL),数据持久化到本地文件。 - 进阶:实现过期时间(TTL)功能。 2. **爬虫+数据分析** - 爬取豆瓣电影Top250数据,分析电影类型分布、评分年份的关系,并用图表可视化。 3. **Markdown解析器** - 将Markdown文本转换为HTML,支持标题、列表、代码块等基础语法。 --- ### **练习建议** 1. **从易到难**:先完成语法题,再逐步挑战算法和系统设计。 2. **限时训练**:例如1小时内完成一个中等难度题目。 3. **反复优化**:第一遍实现功能后,尝试优化代码结构或性能。 4. **记录问题**:遇到的错误和解决思路可以整理成笔记。 如果需要更具体的题目(如针对某语言或领域),可以告诉我你的当前水平和目标方向!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MeJonKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值