3、Python基础速通(下):条件判断、循环与函数
好,咱们接着聊。上一节我们把Python的数据类型和运算符过了一遍,算是把"食材"备齐了。这一节,咱们要学的是"烹饪技巧"——怎么让代码根据不同的情况做不同的事,怎么重复做同一件事,以及怎么把一段逻辑打包成"工具"随时调用。
说实话,这三个东西是写RPA脚本的命根子。你想想看,一个自动化流程里,90%的逻辑都离不开判断和循环。我刚开始写RPA脚本的时候,就是因为没搞懂循环的边界条件,结果让脚本把同一个文件处理了100遍……嗯,那天的日志文件看得我头皮发麻。
3.1 条件判断:让代码学会"看人下菜碟"
条件判断,说白了就是让程序在岔路口做选择。Python里最常用的就是if、elif、else三兄弟。
基本写法很简单:
score = 85
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
else:
print("不及格")
这里有个细节我特别想强调——缩进。Python用缩进来表示代码块,不像其他语言用花括号。我见过太多新手因为缩进不对,程序跑出来的结果完全不是自己想要的。我个人习惯用4个空格,千万别混用Tab和空格,否则你会疯的。
if后面忘了加冒号,排查了整整20分钟。记住:if、elif、else后面一定要跟冒号!
再来看一个RPA场景里的实际用法。比如你要判断一个文件是否存在,再决定要不要处理它:
import os
file_path = "data/report.xlsx"
if os.path.exists(file_path):
print("文件找到了,开始处理")
# 这里可以写处理文件的代码
else:
print("文件不存在,跳过本次任务")
为什么会这样设计?因为RPA脚本经常要处理不确定的情况。文件可能被删了、网络可能断了、数据可能格式不对——没有条件判断,脚本一遇到异常就直接崩了。
3.2 循环:让重复劳动交给机器
循环是RPA的灵魂。你想啊,人工处理100个文件,累得要死;用循环,几行代码搞定。
3.2.1 for循环:遍历一切
for循环在Python里用得最多。它可以遍历列表、字符串、字典、文件行……几乎任何可迭代的东西。
# 遍历列表
files = ["a.txt", "b.txt", "c.txt"]
for file in files:
print(f"正在处理:{file}")
# 遍历数字范围
for i in range(5):
print(f"第{i+1}次循环")
这里range()函数要重点说一下。它生成一个整数序列,range(5)生成0到4,range(1, 5)生成1到4,range(1, 10, 2)生成1,3,5,7,9。我在项目中经常用range()来控制循环次数,比如每隔5秒检查一次文件是否生成。
3.2.2 while循环:条件满足就一直干
while循环适合那种"不知道要循环多少次,但知道什么时候停"的场景。
count = 0
while count < 5:
print(f"当前计数:{count}")
count += 1 # 别忘了这一行,否则死循环
while循环最容易犯的错误就是——忘记更新循环条件,导致死循环。我曾经在凌晨3点调试一个RPA脚本,就是因为少写了一句count += 1,脚本跑了一整夜没停。第二天看到CPU占用100%,整个人都傻了。
3.2.3 break和continue:循环里的"刹车"和"跳过"
这两个关键字很实用。break是直接跳出整个循环,continue是跳过当前这一次,继续下一次。
for i in range(10):
if i == 3:
continue # 跳过3
if i == 7:
break # 到7就停
print(i)
# 输出:0,1,2,4,5,6
3.3 函数定义:把逻辑打包成"工具"
函数是什么?说白了就是把一段代码起个名字,以后想用就调用这个名字。我习惯把函数想象成一个"黑盒子"——你给它输入,它给你输出,中间怎么实现的你不用管。
定义函数用def关键字:
def greet(name):
"""这个函数用来打招呼"""
return f"你好,{name}!"
# 调用函数
message = greet("小明")
print(message) # 输出:你好,小明!
函数的好处有三个:
- 复用:写一次,用N次
- 可读:函数名本身就是注释
- 易维护:改一个地方,所有调用都生效
3.4 实战:用循环批量处理文件
好了,理论讲完了,咱们来点真格的。假设你有一个文件夹,里面有100个CSV文件,你需要把每个文件的第一行(表头)提取出来,合并到一个新文件里。这就是典型的RPA场景。
import os
def extract_headers(folder_path, output_file):
"""
批量提取CSV文件的第一行(表头)
:param folder_path: 文件夹路径
:param output_file: 输出文件路径
"""
# 获取文件夹下所有CSV文件
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]
# 打开输出文件
with open(output_file, 'w', encoding='utf-8') as out:
# 循环处理每个文件
for file_name in csv_files:
file_path = os.path.join(folder_path, file_name)
try:
with open(file_path, 'r', encoding='utf-8') as f:
first_line = f.readline().strip()
out.write(f"{file_name}: {first_line}\n")
print(f"已处理:{file_name}")
except Exception as e:
print(f"处理{file_name}时出错:{e}")
# 调用函数
extract_headers("./data", "headers_summary.txt")
这段代码里,我把三个知识点全用上了:
- 函数:把整个逻辑封装成
extract_headers - for循环:遍历所有CSV文件
- 条件判断:用
if f.endswith('.csv')筛选文件
你想想看,如果人工做这件事,100个文件一个个打开、复制、粘贴,至少得半小时。用这个脚本,几秒钟搞定。这就是RPA的价值。
- 条件判断让程序有"决策能力"
- for循环适合遍历已知集合,while循环适合条件驱动
- 函数是代码复用的基础,每个函数只做一件事
- 循环+条件判断+函数 = RPA脚本的基本单元
下一节,咱们要聊Python的"瑞士军刀"——字符串和文件操作。到时候你会看到,怎么用几行代码搞定Excel、Word、PDF的自动化处理。嗯,那才是RPA真正发力的地方。