← 返回首页

三级-16节课详细教案

原始 Markdown ↗

Python编程三级 详细教案

对应教材:《Python编程入门与算法进阶》第12-16课 适用对象:已完成二级学习的学员 每节课时长:90分钟


第1课 编码与字符集

一、课程基本信息

  • 课次:三级第1课
  • 主题:编码与字符集
  • 时长:90分钟
  • 对应教材:第12课 编码与数制(12.4前)

二、教学目标

知识目标

  1. 理解字符编码的概念和作用
  2. 掌握ASCII码、Unicode、UTF-8的区别
  3. 掌握ord()和chr()函数的使用

能力目标

  1. 能够使用ord()获取字符的ASCII码
  2. 能够使用chr()将ASCII码转换为字符
  3. 能够理解编码在程序中的应用

情感目标

  1. 了解计算机编码的发展历史
  2. 培养对计算机底层原理的兴趣

三、教学重点与难点

  • 重点:ASCII码表、ord()/chr()函数、字符与编码的对应
  • 难点:Unicode与UTF-8的关系、多字节编码原理

四、教学过程

(一)导入(10分钟)

  1. 提问:计算机只认识0和1,那它怎么显示文字的?
  2. 讲解:字符编码就是字符与数字的对应关系
  3. 历史简介:ASCII → Unicode → UTF-8

(二)新知讲解(25分钟)

  1. ASCII码 - 美国信息交换标准代码 - 用7位二进制表示128个字符 - 包括:英文字母、数字、标点、控制字符 - 常见ASCII码:

    • '0' = 48, '9' = 57
    • 'A' = 65, 'Z' = 90
    • 'a' = 97, 'z' = 122
    • 空格 = 32, 换行 = 10
  2. Unicode - 统一码,包含世界上所有字符 - 为每个字符分配唯一编号(码点) - 中文也有对应的Unicode码

  3. UTF-8 - Unicode的实现方式之一 - 可变长度编码:1-4个字节 - ASCII字符用1字节,中文常用3字节 - 兼容ASCII

  4. ord()函数 - 功能:返回字符的Unicode码点 - 语法:ord(字符) - 示例:ord('A') → 65,ord('中') → 20013

  5. chr()函数 - 功能:返回码点对应的字符 - 语法:chr(数字) - 示例:chr(65) → 'A',chr(20013) → '中'

  6. 编码应用 - 字符大小写转换(利用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分钟)

  1. 小结:ASCII/Unicode/UTF-8、ord()/chr()
  2. 易错点: - ord()参数必须是单个字符 - chr()参数范围0-1114111 - 数字字符'0'的ASCII是48,不是0
  3. 作业: - 编写程序:输入字符串,输出每个字符的ASCII码 - 实现凯撒密码解密(向前移动3位) - 记忆常用ASCII码值

第2课 进制转换(上)

教学要点

  • 重点:十进制转二进制、二进制转十进制、八进制
  • 实践:进制转换练习、二进制运算
  • 易错点:除2取余法的读数顺序、二进制位权、前缀标识

核心知识点

  1. 进制的概念:基数、位权
  2. 二进制(Binary):0b前缀,基数2,位权2^n
  3. 八进制(Octal):0o前缀,基数8
  4. 十进制(Decimal):基数10
  5. 十进制转二进制:除2取余法(倒序读取)
  6. 二进制转十进制:按位权展开求和
  7. 十进制转八进制:除8取余法
  8. 八进制转十进制:按位权展开
  9. Python中的进制表示:0b、0o、0x
  10. bin()、oct()、hex()函数

教学过程亮点

  • 用"十进制的123 = 1×100+2×10+3×1"类比位权
  • 手动练习除2取余法(黑板演示)
  • 二进制与八进制的对应关系(3位二进制=1位八进制)

第3课 进制转换(下)

教学要点

  • 重点:十六进制、二进制与十六进制互转、进制运算
  • 实践:十六进制转换、颜色代码理解
  • 易错点:十六进制字母A-F、4位二进制对应1位十六进制

核心知识点

  1. 十六进制(Hex):0x前缀,基数16,数字0-9和字母A-F
  2. 十进制转十六进制:除16取余法
  3. 十六进制转十进制:按位权展开(16^n)
  4. 二进制转十六进制:4位一组,从右往左分组
  5. 十六进制转二进制:每位转为4位二进制
  6. 进制转换的通用方法
  7. 进制在编程中的应用:颜色(#FF0000)、内存地址
  8. 不同进制的输出格式
  9. int(字符串, 进制)函数:按指定进制转十进制
  10. 进制运算:二进制加减

教学过程亮点

  • 用网页颜色代码理解十六进制(#RRGGBB)
  • 4位二进制与1位十六进制的对应表
  • 综合练习:任意进制间转换

第4课 一维数据处理

教学要点

  • 重点:一维数据表示、数据存储、数据读取、数据统计
  • 实践:成绩统计、数据分析
  • 易错点:数据类型转换、空数据处理、索引越界

核心知识点

  1. 一维数据的概念:线性排列的数据(如列表)
  2. 一维数据的表示:Python列表
  3. 数据的存储:列表存储、文件存储
  4. 数据的读取:从列表读取、从文件读取
  5. 数据统计:求和、平均值、最大值、最小值、中位数
  6. 数据筛选:按条件过滤
  7. 数据排序:升序、降序
  8. 数据查找:顺序查找
  9. 数据去重
  10. 一维数据处理的完整流程

教学过程亮点

  • "班级成绩分析"完整案例
  • 从原始数据到统计报告的流程
  • 数据异常值的识别与处理

第5课 二维数据处理

教学要点

  • 重点:二维数据表示、表格数据处理、行列操作
  • 实践:表格数据分析、矩阵操作
  • 易错点:二维索引[row][col]、行列混淆、不规则二维列表

核心知识点

  1. 二维数据的概念:表格形式的数据(行和列)
  2. 二维数据表示:列表嵌套列表(矩阵)
  3. 二维数据的创建:手动创建、循环创建
  4. 访问元素:matrix[row][col]
  5. 遍历二维数据:嵌套循环
  6. 行操作:添加行、删除行、交换行
  7. 列操作:添加列、删除列、按列统计
  8. 矩阵转置
  9. 二维数据的统计分析
  10. CSV格式与二维数据

教学过程亮点

  • 用"Excel表格"类比二维数据
  • 矩阵转置的实现(行列互换)
  • "学生成绩表"的行列统计

第6课 文件读写基础

教学要点

  • 重点:open()函数、文件模式、read()/write()、close()
  • 实践:文件创建、读取、写入
  • 易错点:忘记close()、文件路径、编码问题、模式选择

核心知识点

  1. 文件的概念:持久化存储数据
  2. open()函数:open(文件路径, 模式, encoding='utf-8')
  3. 文件模式: - 'r':只读(默认) - 'w':写入(覆盖) - 'a':追加 - 'r+':读写
  4. read():读取全部内容
  5. readline():读取一行
  6. readlines():读取所有行,返回列表
  7. write():写入字符串
  8. writelines():写入多行
  9. close():关闭文件
  10. 文件指针的概念

教学过程亮点

  • 用"笔记本"类比文件操作
  • 演示文件从创建到写入到读取的完整流程
  • 强调关闭文件的重要性

第7课 文件高级操作

教学要点

  • 重点:with语句、逐行读取、文件追加、CSV文件处理
  • 实践:日志文件处理、CSV数据分析
  • 易错点:with语句的作用域、CSV分隔符、换行符处理

核心知识点

  1. with语句:自动关闭文件(推荐用法) python with open('file.txt', 'r') as f: content = f.read()
  2. 逐行读取:for line in f:
  3. 文件追加:'a'模式
  4. 文件复制:读取后写入新文件
  5. CSV文件:逗号分隔值格式
  6. CSV读取:split(',')分割
  7. CSV写入:用逗号拼接
  8. 文件编码:encoding参数(utf-8、gbk)
  9. 文件路径:相对路径与绝对路径
  10. 异常处理与文件操作结合

教学过程亮点

  • with语句的优势(自动管理资源)
  • "学生成绩CSV文件"的读写分析
  • 大文件的逐行处理(避免内存溢出)

第8课 异常处理

教学要点

  • 重点:try-except结构、常见异常类型、else/finally子句
  • 实践:输入验证、文件操作异常处理
  • 易错点:异常捕获范围、except顺序、finally执行时机

核心知识点

  1. 异常的概念:程序运行时的错误
  2. try-except基本结构: python try: 可能出错的代码 except 异常类型: 处理异常
  3. 常见异常类型: - ValueError:值错误 - TypeError:类型错误 - IndexError:索引越界 - KeyError:字典键不存在 - ZeroDivisionError:除零错误 - FileNotFoundError:文件不存在
  4. 多个except子句
  5. 捕获所有异常:except Exception:
  6. else子句:无异常时执行
  7. finally子句:无论是否异常都执行
  8. raise主动抛出异常
  9. 异常处理的最佳实践
  10. 异常处理在输入验证中的应用

教学过程亮点

  • 用"输入数字"场景演示异常处理
  • 常见异常的触发与识别
  • "健壮的程序"概念(能处理各种意外情况)

第9课 算法基础

教学要点

  • 重点:算法概念、算法特征、算法表示、流程图、伪代码
  • 实践:算法设计、流程图绘制
  • 易错点:算法的有穷性、流程图符号、输入输出明确

核心知识点

  1. 算法的定义:解决问题的步骤和方法
  2. 算法的五大特征: - 有穷性:必须在有限步结束 - 确定性:每一步明确无歧义 - 可行性:每一步都能执行 - 输入:有0个或多个输入 - 输出:有1个或多个输出
  3. 算法的表示方法: - 自然语言 - 流程图 - 伪代码 - 程序代码
  4. 流程图符号: - 起止框:圆角矩形 - 处理框:矩形 - 判断框:菱形 - 输入输出框:平行四边形 - 流程线:箭头
  5. 伪代码:介于自然语言和代码之间
  6. 算法评价:正确性、可读性、效率
  7. 简单算法设计:求最大值、求和、判断质数

教学过程亮点

  • 用"做菜步骤"类比算法
  • 流程图绘制练习(求三个数最大值)
  • 从自然语言到流程图到代码的转换

第10课 解析算法

教学要点

  • 重点:解析算法思想、数学公式建模、应用题编程
  • 实践:数学问题求解、物理公式计算
  • 易错点:公式转代码的准确性、变量定义、单位处理

核心知识点

  1. 解析算法的概念:用数学公式/表达式直接求解
  2. 解析算法的特点:直接计算、效率高
  3. 解题步骤: - 分析问题,找出已知量和未知量 - 建立数学模型(公式) - 确定输入输出 - 编写代码
  4. 经典解析问题: - 一元二次方程求根 - 三角形面积(海伦公式) - 圆的周长和面积 - BMI计算 - 温度转换(摄氏↔华氏) - 利息计算
  5. 数学模块math的使用:sqrt、sin、cos、pi
  6. 解析算法与枚举算法的对比
  7. 实际问题的数学建模

教学过程亮点

  • "一元二次方程求根"完整案例
  • 数学公式到Python代码的转换技巧
  • math模块常用函数介绍

第11课 枚举算法

教学要点

  • 重点:枚举算法思想、穷举法、百钱百鸡、水仙花数
  • 实践:枚举问题编程、优化枚举范围
  • 易错点:枚举范围设置、条件判断、效率优化

核心知识点

  1. 枚举算法的概念:逐一尝试所有可能情况
  2. 枚举算法的特点:简单直观、可能效率低
  3. 枚举三要素: - 枚举范围:所有可能的解 - 枚举条件:判断是否为解 - 枚举变量:控制枚举过程
  4. 经典枚举问题: - 百钱百鸡(公鸡5钱、母鸡3钱、小鸡3只1钱) - 水仙花数(各位立方和等于自身) - 完数(因子和等于自身) - 质数判断 - 密码破解(简单密码)
  5. 枚举范围的优化: - 缩小范围(根据条件约束) - 减少循环层数 - 提前终止(break)
  6. 枚举算法的时间复杂度分析
  7. 枚举与解析的选择策略

教学过程亮点

  • "百钱百鸡"经典问题详解
  • 水仙花数的推导与实现
  • 枚举范围优化的对比(优化前后运行次数)

第12课 排序算法(上)

教学要点

  • 重点:冒泡排序原理、冒泡排序实现、排序过程分析
  • 实践:冒泡排序编写、排序过程跟踪
  • 易错点:相邻元素比较、交换操作、循环边界

核心知识点

  1. 排序的概念:将数据按一定顺序排列
  2. 排序的分类:升序、降序
  3. 冒泡排序原理: - 相邻元素两两比较 - 大的往后移(或小的往前移) - 每轮确定一个最大(最小)值的位置 - 像气泡一样往上冒
  4. 冒泡排序过程分析(以5个数为例)
  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
  6. 冒泡排序的优化: - 提前结束(某轮无交换则已有序) - 记录最后交换位置
  7. 冒泡排序的时间复杂度:O(n²)
  8. 冒泡排序的稳定性:稳定排序
  9. 排序过程的可视化理解

教学过程亮点

  • 用"学生排队"类比冒泡排序
  • 黑板演示冒泡排序的每一轮过程
  • 手动跟踪排序过程(表格记录每轮结果)

第13课 排序算法(下)

教学要点

  • 重点:选择排序、插入排序、三种排序对比、稳定性
  • 实践:选择排序、插入排序编写、排序算法对比
  • 易错点:选择排序的最小值索引、插入排序的移位操作、边界处理

核心知识点

  1. 选择排序原理: - 每轮选最小(大)的元素 - 与当前位置交换 - 代码实现: 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

  2. 插入排序原理: - 将未排序元素插入到已排序部分的正确位置 - 像打扑克牌整理手牌 - 代码实现: 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

  3. 三种排序对比: | 算法 | 时间复杂度 | 空间复杂度 | 稳定性 | 特点 | |------|-----------|-----------|--------|------| | 冒泡 | O(n²) | O(1) | 稳定 | 简单,交换多 | | 选择 | O(n²) | O(1) | 不稳定 | 交换少,比较多 | | 插入 | O(n²) | O(1) | 稳定 | 对近乎有序数据高效 |

  4. 排序的稳定性:相等元素排序后相对位置不变

  5. 排序算法的选择策略
  6. Python内置排序:sorted()、list.sort()(Timsort算法)

教学过程亮点

  • 用"打扑克牌"类比插入排序
  • 三种排序的过程对比演示
  • 讨论:什么情况下用哪种排序

第14课 查找算法

教学要点

  • 重点:顺序查找、对分查找(二分查找)、查找效率对比
  • 实践:查找算法实现、查找过程分析
  • 易错点:二分查找要求有序、mid计算、边界更新、循环条件

核心知识点

  1. 查找的概念:在数据集合中寻找特定元素
  2. 顺序查找(线性查找): - 原理:从头到尾逐个比较 - 代码: python def linear_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1 - 时间复杂度:O(n) - 优点:不需要有序,简单 - 缺点:数据量大时效率低

  3. 对分查找(二分查找): - 前提:数据必须有序 - 原理:每次取中间元素比较,缩小一半范围 - 代码: 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) - 优点:效率高 - 缺点:要求有序,插入删除困难

  4. 两种查找对比

  5. 查找过程的可视化
  6. 查找算法的实际应用
  7. Python中的查找:in运算符、list.index()

教学过程亮点

  • "猜数字游戏"就是二分查找的思想
  • 演示1000个数中查找:顺序最多1000次,二分最多10次
  • 二分查找边界条件的详细分析

第15课 核心内置函数

教学要点

  • 重点:数学/类型/序列/对象操作函数、map/filter、易错点
  • 实践:内置函数综合应用、函数式编程入门
  • 易错点:all/any的空序列返回值、map/filter返回迭代器、divmod返回元组

核心知识点

  1. 数学运算函数: - abs(x):绝对值 - divmod(a, b):返回(商, 余数)元组 - pow(x, y):x的y次方 - round(x, n):四舍五入 - max()、min()、sum()

  2. 类型转换函数: - bool(x):转布尔值 - ord(c):字符转Unicode码 - chr(n):码转字符 - set(iterable):转集合(去重) - enumerate(iterable):枚举(索引+值)

  3. 序列操作函数: - all(iterable):所有元素为True则True - any(iterable):任一元素为True则True - filter(func, iterable):过滤 - map(func, iterable):映射 - sorted()、reversed()、zip()

  4. 对象操作函数: - help(obj):帮助信息 - dir(obj):属性方法列表 - ascii(obj):ASCII表示 - vars(obj):属性字典 - type()、isinstance()、id()

  5. map和filter的使用(结合lambda)

  6. 函数式编程思想入门
  7. 内置函数的选择与组合使用

教学过程亮点

  • 用"数据清洗"场景综合运用filter/map
  • all/any在条件判断中的简洁用法
  • enumerate在for循环中同时获取索引和值

第16课 三级综合项目

项目主题:学生成绩统计分析系统

功能要求

  1. 从CSV文件读取学生成绩数据
  2. 数据清洗:处理缺失值、异常值
  3. 统计分析: - 各科平均分、最高分、最低分 - 总分排名 - 及格率、优秀率 - 分数段分布
  4. 数据排序:按总分、按单科排序
  5. 数据查找:按姓名查找学生成绩
  6. 结果输出:生成统计报告文件
  7. 异常处理:文件不存在、数据格式错误

技术要点

  • 文件操作:CSV读写、with语句
  • 数据结构:二维列表、字典
  • 算法:排序(冒泡/选择/插入)、查找(顺序/二分)
  • 异常处理:try-except-finally
  • 内置函数:统计、map、filter
  • 编码:文件编码处理

模拟测试

  • 选择题:数制、编码、数据处理、文件、异常、算法、函数
  • 判断题:概念辨析
  • 编程题:3道(进制转换、排序算法、文件处理)

知识串讲

  1. 编码与数制:ASCII/Unicode、进制转换方法
  2. 数据处理:一维/二维数据、统计分析
  3. 文件操作:open/read/write、with、CSV
  4. 异常处理:try-except、常见异常类型
  5. 算法:解析、枚举、冒泡/选择/插入排序、顺序/二分查找
  6. 核心函数:数学、类型、序列、对象操作
  7. 易错点汇总与答题技巧