Python编程三级 详细教案 ¶
对应教材:《Python编程入门与算法进阶》第12-16课 适用对象:已完成二级学习的学员 每节课时长:90分钟
第1课 编码与字符集 ¶
一、课程基本信息 ¶
- 课次:三级第1课
- 主题:编码与字符集
- 时长:90分钟
- 对应教材:第12课 编码与数制(12.4前)
二、教学目标 ¶
知识目标 ¶
- 理解字符编码的概念和作用
- 掌握ASCII码、Unicode、UTF-8的区别
- 掌握ord()和chr()函数的使用
能力目标 ¶
- 能够使用ord()获取字符的ASCII码
- 能够使用chr()将ASCII码转换为字符
- 能够理解编码在程序中的应用
情感目标 ¶
- 了解计算机编码的发展历史
- 培养对计算机底层原理的兴趣
三、教学重点与难点 ¶
- 重点:ASCII码表、ord()/chr()函数、字符与编码的对应
- 难点:Unicode与UTF-8的关系、多字节编码原理
四、教学过程 ¶
(一)导入(10分钟) ¶
- 提问:计算机只认识0和1,那它怎么显示文字的?
- 讲解:字符编码就是字符与数字的对应关系
- 历史简介:ASCII → Unicode → UTF-8
(二)新知讲解(25分钟) ¶
-
ASCII码 - 美国信息交换标准代码 - 用7位二进制表示128个字符 - 包括:英文字母、数字、标点、控制字符 - 常见ASCII码:
- '0' = 48, '9' = 57
- 'A' = 65, 'Z' = 90
- 'a' = 97, 'z' = 122
- 空格 = 32, 换行 = 10
-
Unicode - 统一码,包含世界上所有字符 - 为每个字符分配唯一编号(码点) - 中文也有对应的Unicode码
-
UTF-8 - Unicode的实现方式之一 - 可变长度编码:1-4个字节 - ASCII字符用1字节,中文常用3字节 - 兼容ASCII
-
ord()函数 - 功能:返回字符的Unicode码点 - 语法:
ord(字符)- 示例:ord('A')→ 65,ord('中')→ 20013 -
chr()函数 - 功能:返回码点对应的字符 - 语法:
chr(数字)- 示例:chr(65)→ 'A',chr(20013)→ '中' -
编码应用 - 字符大小写转换(利用ASCII码差值32) - 字符加密(凯撒密码) - 字符串与编码转换
(三)动手实践(30分钟) ¶
任务1:ASCII码查询(8分钟)
# 查询常用字符的ASCII码
print(ord('0'), ord('9'))
print(ord('A'), ord('Z'))
print(ord('a'), ord('z'))
print(ord(' '), ord('\n'))
# 根据码点输出字符
print(chr(48), chr(57))
print(chr(65), chr(90))
任务2:字符加密(10分钟) 实现凯撒密码:将每个字母向后移动3位
text = "Hello"
shift = 3
result = ""
for ch in text:
if 'a' <= ch <= 'z':
result += chr((ord(ch) - ord('a') + shift) % 26 + ord('a'))
elif 'A' <= ch <= 'Z':
result += chr((ord(ch) - ord('A') + shift) % 26 + ord('A'))
else:
result += ch
print(result) # Khoor
任务3:字符统计(12分钟) 输入一段文字,统计其中大写字母、小写字母、数字、其他字符的个数 - 利用ord()判断字符范围
(四)小结与作业(25分钟) ¶
- 小结:ASCII/Unicode/UTF-8、ord()/chr()
- 易错点: - ord()参数必须是单个字符 - chr()参数范围0-1114111 - 数字字符'0'的ASCII是48,不是0
- 作业: - 编写程序:输入字符串,输出每个字符的ASCII码 - 实现凯撒密码解密(向前移动3位) - 记忆常用ASCII码值
第2课 进制转换(上) ¶
教学要点 ¶
- 重点:十进制转二进制、二进制转十进制、八进制
- 实践:进制转换练习、二进制运算
- 易错点:除2取余法的读数顺序、二进制位权、前缀标识
核心知识点 ¶
- 进制的概念:基数、位权
- 二进制(Binary):0b前缀,基数2,位权2^n
- 八进制(Octal):0o前缀,基数8
- 十进制(Decimal):基数10
- 十进制转二进制:除2取余法(倒序读取)
- 二进制转十进制:按位权展开求和
- 十进制转八进制:除8取余法
- 八进制转十进制:按位权展开
- Python中的进制表示:0b、0o、0x
- bin()、oct()、hex()函数
教学过程亮点 ¶
- 用"十进制的123 = 1×100+2×10+3×1"类比位权
- 手动练习除2取余法(黑板演示)
- 二进制与八进制的对应关系(3位二进制=1位八进制)
第3课 进制转换(下) ¶
教学要点 ¶
- 重点:十六进制、二进制与十六进制互转、进制运算
- 实践:十六进制转换、颜色代码理解
- 易错点:十六进制字母A-F、4位二进制对应1位十六进制
核心知识点 ¶
- 十六进制(Hex):0x前缀,基数16,数字0-9和字母A-F
- 十进制转十六进制:除16取余法
- 十六进制转十进制:按位权展开(16^n)
- 二进制转十六进制:4位一组,从右往左分组
- 十六进制转二进制:每位转为4位二进制
- 进制转换的通用方法
- 进制在编程中的应用:颜色(#FF0000)、内存地址
- 不同进制的输出格式
- int(字符串, 进制)函数:按指定进制转十进制
- 进制运算:二进制加减
教学过程亮点 ¶
- 用网页颜色代码理解十六进制(#RRGGBB)
- 4位二进制与1位十六进制的对应表
- 综合练习:任意进制间转换
第4课 一维数据处理 ¶
教学要点 ¶
- 重点:一维数据表示、数据存储、数据读取、数据统计
- 实践:成绩统计、数据分析
- 易错点:数据类型转换、空数据处理、索引越界
核心知识点 ¶
- 一维数据的概念:线性排列的数据(如列表)
- 一维数据的表示:Python列表
- 数据的存储:列表存储、文件存储
- 数据的读取:从列表读取、从文件读取
- 数据统计:求和、平均值、最大值、最小值、中位数
- 数据筛选:按条件过滤
- 数据排序:升序、降序
- 数据查找:顺序查找
- 数据去重
- 一维数据处理的完整流程
教学过程亮点 ¶
- "班级成绩分析"完整案例
- 从原始数据到统计报告的流程
- 数据异常值的识别与处理
第5课 二维数据处理 ¶
教学要点 ¶
- 重点:二维数据表示、表格数据处理、行列操作
- 实践:表格数据分析、矩阵操作
- 易错点:二维索引[row][col]、行列混淆、不规则二维列表
核心知识点 ¶
- 二维数据的概念:表格形式的数据(行和列)
- 二维数据表示:列表嵌套列表(矩阵)
- 二维数据的创建:手动创建、循环创建
- 访问元素:
matrix[row][col] - 遍历二维数据:嵌套循环
- 行操作:添加行、删除行、交换行
- 列操作:添加列、删除列、按列统计
- 矩阵转置
- 二维数据的统计分析
- CSV格式与二维数据
教学过程亮点 ¶
- 用"Excel表格"类比二维数据
- 矩阵转置的实现(行列互换)
- "学生成绩表"的行列统计
第6课 文件读写基础 ¶
教学要点 ¶
- 重点:open()函数、文件模式、read()/write()、close()
- 实践:文件创建、读取、写入
- 易错点:忘记close()、文件路径、编码问题、模式选择
核心知识点 ¶
- 文件的概念:持久化存储数据
- open()函数:
open(文件路径, 模式, encoding='utf-8') - 文件模式: - 'r':只读(默认) - 'w':写入(覆盖) - 'a':追加 - 'r+':读写
- read():读取全部内容
- readline():读取一行
- readlines():读取所有行,返回列表
- write():写入字符串
- writelines():写入多行
- close():关闭文件
- 文件指针的概念
教学过程亮点 ¶
- 用"笔记本"类比文件操作
- 演示文件从创建到写入到读取的完整流程
- 强调关闭文件的重要性
第7课 文件高级操作 ¶
教学要点 ¶
- 重点:with语句、逐行读取、文件追加、CSV文件处理
- 实践:日志文件处理、CSV数据分析
- 易错点:with语句的作用域、CSV分隔符、换行符处理
核心知识点 ¶
- with语句:自动关闭文件(推荐用法)
python with open('file.txt', 'r') as f: content = f.read() - 逐行读取:
for line in f: - 文件追加:'a'模式
- 文件复制:读取后写入新文件
- CSV文件:逗号分隔值格式
- CSV读取:split(',')分割
- CSV写入:用逗号拼接
- 文件编码:encoding参数(utf-8、gbk)
- 文件路径:相对路径与绝对路径
- 异常处理与文件操作结合
教学过程亮点 ¶
- with语句的优势(自动管理资源)
- "学生成绩CSV文件"的读写分析
- 大文件的逐行处理(避免内存溢出)
第8课 异常处理 ¶
教学要点 ¶
- 重点:try-except结构、常见异常类型、else/finally子句
- 实践:输入验证、文件操作异常处理
- 易错点:异常捕获范围、except顺序、finally执行时机
核心知识点 ¶
- 异常的概念:程序运行时的错误
- try-except基本结构:
python try: 可能出错的代码 except 异常类型: 处理异常 - 常见异常类型: - ValueError:值错误 - TypeError:类型错误 - IndexError:索引越界 - KeyError:字典键不存在 - ZeroDivisionError:除零错误 - FileNotFoundError:文件不存在
- 多个except子句
- 捕获所有异常:
except Exception: - else子句:无异常时执行
- finally子句:无论是否异常都执行
- raise主动抛出异常
- 异常处理的最佳实践
- 异常处理在输入验证中的应用
教学过程亮点 ¶
- 用"输入数字"场景演示异常处理
- 常见异常的触发与识别
- "健壮的程序"概念(能处理各种意外情况)
第9课 算法基础 ¶
教学要点 ¶
- 重点:算法概念、算法特征、算法表示、流程图、伪代码
- 实践:算法设计、流程图绘制
- 易错点:算法的有穷性、流程图符号、输入输出明确
核心知识点 ¶
- 算法的定义:解决问题的步骤和方法
- 算法的五大特征: - 有穷性:必须在有限步结束 - 确定性:每一步明确无歧义 - 可行性:每一步都能执行 - 输入:有0个或多个输入 - 输出:有1个或多个输出
- 算法的表示方法: - 自然语言 - 流程图 - 伪代码 - 程序代码
- 流程图符号: - 起止框:圆角矩形 - 处理框:矩形 - 判断框:菱形 - 输入输出框:平行四边形 - 流程线:箭头
- 伪代码:介于自然语言和代码之间
- 算法评价:正确性、可读性、效率
- 简单算法设计:求最大值、求和、判断质数
教学过程亮点 ¶
- 用"做菜步骤"类比算法
- 流程图绘制练习(求三个数最大值)
- 从自然语言到流程图到代码的转换
第10课 解析算法 ¶
教学要点 ¶
- 重点:解析算法思想、数学公式建模、应用题编程
- 实践:数学问题求解、物理公式计算
- 易错点:公式转代码的准确性、变量定义、单位处理
核心知识点 ¶
- 解析算法的概念:用数学公式/表达式直接求解
- 解析算法的特点:直接计算、效率高
- 解题步骤: - 分析问题,找出已知量和未知量 - 建立数学模型(公式) - 确定输入输出 - 编写代码
- 经典解析问题: - 一元二次方程求根 - 三角形面积(海伦公式) - 圆的周长和面积 - BMI计算 - 温度转换(摄氏↔华氏) - 利息计算
- 数学模块math的使用:sqrt、sin、cos、pi
- 解析算法与枚举算法的对比
- 实际问题的数学建模
教学过程亮点 ¶
- "一元二次方程求根"完整案例
- 数学公式到Python代码的转换技巧
- math模块常用函数介绍
第11课 枚举算法 ¶
教学要点 ¶
- 重点:枚举算法思想、穷举法、百钱百鸡、水仙花数
- 实践:枚举问题编程、优化枚举范围
- 易错点:枚举范围设置、条件判断、效率优化
核心知识点 ¶
- 枚举算法的概念:逐一尝试所有可能情况
- 枚举算法的特点:简单直观、可能效率低
- 枚举三要素: - 枚举范围:所有可能的解 - 枚举条件:判断是否为解 - 枚举变量:控制枚举过程
- 经典枚举问题: - 百钱百鸡(公鸡5钱、母鸡3钱、小鸡3只1钱) - 水仙花数(各位立方和等于自身) - 完数(因子和等于自身) - 质数判断 - 密码破解(简单密码)
- 枚举范围的优化: - 缩小范围(根据条件约束) - 减少循环层数 - 提前终止(break)
- 枚举算法的时间复杂度分析
- 枚举与解析的选择策略
教学过程亮点 ¶
- "百钱百鸡"经典问题详解
- 水仙花数的推导与实现
- 枚举范围优化的对比(优化前后运行次数)
第12课 排序算法(上) ¶
教学要点 ¶
- 重点:冒泡排序原理、冒泡排序实现、排序过程分析
- 实践:冒泡排序编写、排序过程跟踪
- 易错点:相邻元素比较、交换操作、循环边界
核心知识点 ¶
- 排序的概念:将数据按一定顺序排列
- 排序的分类:升序、降序
- 冒泡排序原理: - 相邻元素两两比较 - 大的往后移(或小的往前移) - 每轮确定一个最大(最小)值的位置 - 像气泡一样往上冒
- 冒泡排序过程分析(以5个数为例)
- 冒泡排序代码实现:
python def bubble_sort(arr): n = len(arr) for i in range(n - 1): for j in range(n - 1 - i): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr - 冒泡排序的优化: - 提前结束(某轮无交换则已有序) - 记录最后交换位置
- 冒泡排序的时间复杂度:O(n²)
- 冒泡排序的稳定性:稳定排序
- 排序过程的可视化理解
教学过程亮点 ¶
- 用"学生排队"类比冒泡排序
- 黑板演示冒泡排序的每一轮过程
- 手动跟踪排序过程(表格记录每轮结果)
第13课 排序算法(下) ¶
教学要点 ¶
- 重点:选择排序、插入排序、三种排序对比、稳定性
- 实践:选择排序、插入排序编写、排序算法对比
- 易错点:选择排序的最小值索引、插入排序的移位操作、边界处理
核心知识点 ¶
-
选择排序原理: - 每轮选最小(大)的元素 - 与当前位置交换 - 代码实现:
python def selection_sort(arr): n = len(arr) for i in range(n - 1): min_idx = i for j in range(i + 1, n): if arr[j] < arr[min_idx]: min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i] return arr -
插入排序原理: - 将未排序元素插入到已排序部分的正确位置 - 像打扑克牌整理手牌 - 代码实现:
python def insertion_sort(arr): for i in range(1, len(arr)): key = arr[i] j = i - 1 while j >= 0 and arr[j] > key: arr[j + 1] = arr[j] j -= 1 arr[j + 1] = key return arr -
三种排序对比: | 算法 | 时间复杂度 | 空间复杂度 | 稳定性 | 特点 | |------|-----------|-----------|--------|------| | 冒泡 | O(n²) | O(1) | 稳定 | 简单,交换多 | | 选择 | O(n²) | O(1) | 不稳定 | 交换少,比较多 | | 插入 | O(n²) | O(1) | 稳定 | 对近乎有序数据高效 |
-
排序的稳定性:相等元素排序后相对位置不变
- 排序算法的选择策略
- Python内置排序:sorted()、list.sort()(Timsort算法)
教学过程亮点 ¶
- 用"打扑克牌"类比插入排序
- 三种排序的过程对比演示
- 讨论:什么情况下用哪种排序
第14课 查找算法 ¶
教学要点 ¶
- 重点:顺序查找、对分查找(二分查找)、查找效率对比
- 实践:查找算法实现、查找过程分析
- 易错点:二分查找要求有序、mid计算、边界更新、循环条件
核心知识点 ¶
- 查找的概念:在数据集合中寻找特定元素
-
顺序查找(线性查找): - 原理:从头到尾逐个比较 - 代码:
python def linear_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1- 时间复杂度:O(n) - 优点:不需要有序,简单 - 缺点:数据量大时效率低 -
对分查找(二分查找): - 前提:数据必须有序 - 原理:每次取中间元素比较,缩小一半范围 - 代码:
python def binary_search(arr, target): left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1- 时间复杂度:O(log n) - 优点:效率高 - 缺点:要求有序,插入删除困难 -
两种查找对比
- 查找过程的可视化
- 查找算法的实际应用
- Python中的查找:in运算符、list.index()
教学过程亮点 ¶
- "猜数字游戏"就是二分查找的思想
- 演示1000个数中查找:顺序最多1000次,二分最多10次
- 二分查找边界条件的详细分析
第15课 核心内置函数 ¶
教学要点 ¶
- 重点:数学/类型/序列/对象操作函数、map/filter、易错点
- 实践:内置函数综合应用、函数式编程入门
- 易错点:all/any的空序列返回值、map/filter返回迭代器、divmod返回元组
核心知识点 ¶
-
数学运算函数: - abs(x):绝对值 - divmod(a, b):返回(商, 余数)元组 - pow(x, y):x的y次方 - round(x, n):四舍五入 - max()、min()、sum()
-
类型转换函数: - bool(x):转布尔值 - ord(c):字符转Unicode码 - chr(n):码转字符 - set(iterable):转集合(去重) - enumerate(iterable):枚举(索引+值)
-
序列操作函数: - all(iterable):所有元素为True则True - any(iterable):任一元素为True则True - filter(func, iterable):过滤 - map(func, iterable):映射 - sorted()、reversed()、zip()
-
对象操作函数: - help(obj):帮助信息 - dir(obj):属性方法列表 - ascii(obj):ASCII表示 - vars(obj):属性字典 - type()、isinstance()、id()
-
map和filter的使用(结合lambda)
- 函数式编程思想入门
- 内置函数的选择与组合使用
教学过程亮点 ¶
- 用"数据清洗"场景综合运用filter/map
- all/any在条件判断中的简洁用法
- enumerate在for循环中同时获取索引和值
第16课 三级综合项目 ¶
项目主题:学生成绩统计分析系统 ¶
功能要求 ¶
- 从CSV文件读取学生成绩数据
- 数据清洗:处理缺失值、异常值
- 统计分析: - 各科平均分、最高分、最低分 - 总分排名 - 及格率、优秀率 - 分数段分布
- 数据排序:按总分、按单科排序
- 数据查找:按姓名查找学生成绩
- 结果输出:生成统计报告文件
- 异常处理:文件不存在、数据格式错误
技术要点 ¶
- 文件操作:CSV读写、with语句
- 数据结构:二维列表、字典
- 算法:排序(冒泡/选择/插入)、查找(顺序/二分)
- 异常处理:try-except-finally
- 内置函数:统计、map、filter
- 编码:文件编码处理
模拟测试 ¶
- 选择题:数制、编码、数据处理、文件、异常、算法、函数
- 判断题:概念辨析
- 编程题:3道(进制转换、排序算法、文件处理)
知识串讲 ¶
- 编码与数制:ASCII/Unicode、进制转换方法
- 数据处理:一维/二维数据、统计分析
- 文件操作:open/read/write、with、CSV
- 异常处理:try-except、常见异常类型
- 算法:解析、枚举、冒泡/选择/插入排序、顺序/二分查找
- 核心函数:数学、类型、序列、对象操作
- 易错点汇总与答题技巧