还在复制粘贴代码?函数让你一键生成成绩单、写评语、发通知!
# 定义函数 - 就像创建一个新工具def 打印问候(): # def是定义函数的关键字print("您好!欢迎使用数字编程。") # 函数体,要缩进4个空格print("今天是2026年2月4日")# 使用函数 - 就像使用这个工具打印问候() # 第一次调用打印问候() # 第二次调用打印问候() # 第三次调用
def 生成通知(老师姓名, 班级, 日期): # 括号里的就是参数# f-string格式化字符串,把变量嵌入到文本中 通知 = f""" 【会议通知】 尊敬的{老师姓名}老师: 请于{日期}参加{班级}家长会。 教务处 {日期} """print(通知)# 给不同老师发通知 - 每次调用传入不同参数生成通知("张老师", "三年级二班", "2月5日")生成通知("李老师", "五年级一班", "2月5日")
老师姓名, 班级, 日期:函数的三个参数,调用时必须提供
f""" """:多行f-string,可以包含换行符
{老师姓名}:在f-string中嵌入变量的方法
参数就像填空题:每次调用填入不同的值
def 分析成绩(学生姓名, 成绩列表):"""分析学生成绩,返回统计结果"""# sum()求和,len()获取列表长度 总分 = sum(成绩列表) 平均分 = 总分 / len(成绩列表) 最高分 = max(成绩列表) # max()找最大值 最低分 = min(成绩列表) # min()找最小值# if-elif-else判断成绩等级if 平均分 >= 90: 评价 = "优秀"elif 平均分 >= 80: 评价 = "良好"elif 平均分 >= 60: 评价 = "及格"else: 评价 = "不及格"# return返回结果给调用者return {"姓名": 学生姓名,"总分": 总分,"平均分": round(平均分, 1), # round()四舍五入,保留1位小数"最高分": 最高分,"最低分": 最低分,"评价": 评价 }# 使用示例小明成绩 = [85, 92, 78, 90] # 列表,包含4科成绩结果 = 分析成绩("小明", 小明成绩) # 调用函数,传入参数print(f"{结果['姓名']}:平均分{结果['平均分']},评价:{结果['评价']}")
def 生成评语(学生姓名, 分数, 学科="语文"):"""根据分数生成学科评语,学科有默认值"""# 根据分数范围判断表现if 分数 >= 90: 表现 = "表现优异,基础知识扎实" 建议 = "继续保持,可挑战更高难度内容"elif 分数 >= 80: 表现 = "表现良好,掌握基本知识点" 建议 = "加强应用题练习"elif 分数 >= 60: 表现 = "基本掌握知识点" 建议 = "需要多做基础练习"else: 表现 = "需要加强学习" 建议 = "建议课后单独辅导"# 返回格式化后的评语 评语 = f""" {学生姓名}同学{学科}成绩:{分数}分 学习表现:{表现} 改进建议:{建议} """return 评语# 批量生成 - 使用for循环处理多个学生学生列表 = [ ("张三", 85, "数学"), # 元组,包含学生信息 ("李四", 92, "数学"), ("王五", 78, "数学")]for 学生 in 学生列表: # 遍历学生列表 评语 = 生成评语(学生[0], 学生[1], 学生[2]) # 学生[0]是姓名,[1]是分数,[2]是学科print(评语)print("-" * 30) # 打印分隔线
学科="语文":默认参数,调用时不提供则使用默认值
学生列表:列表包含多个元组,每个元组是一个学生的信息
for 学生 in 学生列表::遍历列表中的每个元素
学生[0]:元组的索引访问,0是第一个元素
"-" * 30:字符串乘法,重复30次"-"
def 生成公文(标题, 正文, 发文单位="教育局", 文号="2023年001号"):"""生成标准格式公文,有默认参数""" 公文 = f""" {发文单位} {发文单位[:2]}发〔{文号}〕 # 发文单位[:2]取前两个字符 {'*' * 40} 关于{标题}的通知 各相关单位: {正文} 特此通知。 {发文单位} {文号} """return 公文# 使用示例通知正文 = """为加强校园安全管理,决定开展校园安全检查。检查时间:2023年10月20日-11月20日请各单位做好准备。"""公文 = 生成公文("开展校园安全检查工作", 通知正文)print(公文)# 也可以指定发文单位和文号公文2 = 生成公文("表彰优秀教师", "表彰决定正文...", "区教育局", "2023年002号")
发文单位[:2]:字符串切片,取前两个字符
默认参数让函数更灵活,可以指定也可以使用默认值
调用时可以按顺序传参,也可以指定参数名传参
def 生成会议纪要(会议主题, 时间, 地点, 参会人员, 决议事项):"""生成标准会议纪要""" 纪要 = f""" 会议纪要 会议主题:{会议主题} 会议时间:{时间} 会议地点:{地点} 参会人员: """# 添加参会人员 - enumerate给列表元素编号for i, 人员 in enumerate(参会人员, 1): # 从1开始编号 纪要 += f" {i}. {人员}\n"# += 字符串追加 纪要 += f""" 决议事项: """# 添加决议事项 - items()获取字典的键值对for 事项, 内容 in 决议事项.items(): 纪要 += f" {事项}:{内容}\n" 纪要 += f""" 记录人:办公室 发文人:{时间} """return 纪要# 使用示例参会人员 = ["张校长", "李主任", "王科长", "赵老师"]决议事项 = {"安全责任": "明确各部门安全职责","隐患排查": "本周完成全校排查","应急预案": "修订完善应急预案"}纪要 = 生成会议纪要("校园安全工作会议", "2026年2月4日", "行政楼301", 参会人员, 决议事项)print(纪要)# 保存到文件with open("会议纪要.txt", "w", encoding="utf-8") as f: f.write(纪要)print("已保存到文件:会议纪要.txt")
enumerate(参会人员, 1):给列表元素编号,从1开始
+=:字符串追加运算符
.items():字典方法,返回键值对
with open() as f::文件操作,自动关闭文件
encoding="utf-8":指定编码,防止中文乱码
import os # 导入操作系统模块def 批量重命名文件(文件夹路径, 新前缀):"""批量重命名文件夹中的文件"""# 获取文件夹中所有文件 - listdir列出目录内容 所有文件 = os.listdir(文件夹路径)print(f"找到{len(所有文件)}个文件") # len()获取文件数量for i, 原文件名 in enumerate(所有文件, 1):# 分离文件名和扩展名 - splitext分割扩展名 文件名, 扩展名 = os.path.splitext(原文件名)# 生成新文件名 - :03d表示3位数字,不足补0 新文件名 = f"{新前缀}_{i:03d}{扩展名}"# 构建完整路径 - join连接路径 旧路径 = os.path.join(文件夹路径, 原文件名) 新路径 = os.path.join(文件夹路径, 新文件名)# 重命名文件 - rename修改文件名 os.rename(旧路径, 新路径)print(f"重命名:{原文件名} -> {新文件名}")print("批量重命名完成!")# 使用示例(请先创建测试文件夹)测试文件夹 = "test_files"if os.path.exists(测试文件夹): # exists检查路径是否存在 批量重命名文件(测试文件夹, "学生档案")else:print(f"请先创建文件夹:{测试文件夹}")
import os:导入操作系统模块,用于文件操作
os.listdir():列出指定目录下的所有文件和文件夹
os.path.splitext():分割文件名和扩展名
os.path.join():安全地连接路径,自动处理斜杠
os.rename():重命名文件或移动文件
os.path.exists():检查路径是否存在
:03d:格式化数字为3位数,不足补0
定义函数:def 函数名(参数): 创建可重用代码块
函数参数:可以传入数据,让函数处理不同内容
默认参数:def 函数(参数=默认值) 让调用更灵活
返回值:return 结果 函数处理完返回数据
函数文档:"""说明""" 解释函数作用和参数
调用函数:函数名(参数) 使用已定义的函数
下期更新:明天下午6点,字典实战教程,继续我们的Python摸鱼之旅!