青少年Python编程三级核心知识讲课教案
一、基本信息
授课对象:掌握Python基础语法(变量、循环、条件判断等)的青少年
授课目标:掌握数制转换、数据处理、文件操作、异常处理及基础算法,能编写对应功能程序
授课时长:5课时(每课时45分钟)
教学工具:Python编译器(如IDLE、PyCharm Edu)、多媒体课件、案例代码文件
二、教学重难点
重点:数制转换方法、一维/二维数据处理、CSV文件读写、try-except异常处理、基础算法实现
难点:十六进制与二进制转换逻辑、二维数据索引操作、算法逻辑梳理(如排序、查找)
三、课时安排
| 课时 | 核心内容 | 对应知识要点 |
|---|---|---|
| 1 | 编码与数制转换 | 一 |
| 2 | 一维数据处理 | 二、七(内置函数应用) |
| 3 | 二维数据与CSV文件读写 | 三、四 |
| 4 | 异常处理与算法基础(一) | 五、六(解析、枚举) |
| 5 | 算法基础(二)与综合练习 | 六(排序、查找)、综合应用 |
四、详细教学过程
第一课时:编码与数制转换
1. 导入(5分钟)
提问:“我们生活中除了十进制,还有哪些进制?”(引导学生说出时钟12进制、月份12进制、计算机二进制等)。引出主题:计算机底层使用二进制,编程中常涉及多进制转换,本节课学习二进制、十进制、十六进制转换及Python相关函数。
2. 新知识讲解(25分钟)
(1)数制基本概念
十进制:0-9,逢10进1(日常使用)
二进制:0-1,逢2进1(计算机底层,前缀0b表示)
十六进制:0-9、A-F(A=10,F=15),逢16进1(简化二进制表示,前缀0x表示)
(2)手动转换方法
十进制转二进制/十六进制:除基取余法。示例:十进制10转二进制:10÷2=5余0→5÷2=2余1→2÷2=1余0→1÷2=0余1,倒序取余得1010;十进制10转十六进制:10÷16=0余10,对应A。
二进制/十六进制转十进制:按权展开法。示例:二进制1010转十进制:1×2³+0×2²+1×2¹+0×2⁰=8+0+2+0=10;十六进制0xA转十进制:10×16⁰=10。
二进制与十六进制互转:4位二进制对应1位十六进制(简化记忆:0000=0,1111=F)。示例:二进制11010101转十六进制:拆分为1101 0101→D5。
(3)Python数制转换函数
打开IDLE演示,讲解3个核心函数:
bin(整数):十进制转二进制字符串,带前缀0b。示例:bin(10)→'0b1010'。
oct(整数):十进制转八进制(拓展,辅助理解),hex(整数):十进制转十六进制字符串,带前缀0x。示例:hex(10)→'0xa'。
int(字符串, 基数):指定基数的字符串转十进制整数。示例:int('1010',2)=10,int('0xa',16)=10。
强调:若要去除前缀,可使用切片[2:],如hex(10)[2:]→'a'。
3. 课堂练习(10分钟)
布置任务:
手动计算十进制15转二进制、十六进制;二进制1111转十进制。
用Python代码实现:输入十进制20,输出其二进制、十六进制(去除前缀)。
教师巡视指导,针对共性问题集中讲解。
4. 小结(5分钟)
回顾手动转换核心方法(除基取余、按权展开),总结Python转换函数及前缀去除技巧。
第二课时:一维数据处理
1. 导入(5分钟)
展示成绩数据:[85,92,78,95,88],提问:“如何快速算出平均分?找出最高分?”引出主题:一维数据(如列表、元组)是Python中常用数据形式,本节课学习其表示、读写及处理方法,结合内置函数解决实际问题。
2. 新知识讲解(25分钟)
(1)一维数据的表示
列表(list):可修改,用[]表示,元素类型可混合。示例:scores = [85,92,78,95,88]。
元组(tuple):不可修改,用()表示,适合存储固定数据。示例:info = ('张三',12,'男')。
(2)一维数据的基本操作
访问:通过索引(从0开始),如scores[0]→85;切片:scores[1:3]→[92,78](左闭右开)。
修改(仅列表):scores[2] = 80(将78改为80);添加:scores.append(90)(末尾添加);删除:scores.remove(95)(删除指定元素)。
(3)核心内置函数应用(重点)
结合成绩案例演示常用函数:
sum(列表):求和。sum(scores)→438。
len(列表):求长度(元素个数)。len(scores)→5。
max(列表)/min(列表):求最大/最小值。max(scores)→95。
sorted(列表, reverse=False):排序,reverse=True表示降序。sorted(scores, reverse=True)→[95,92,88,85,78](不修改原列表);列表.sort()→直接修改原列表。
enumerate(列表):获取索引和元素。for i, score in enumerate(scores): print(i, score)→输出索引和对应成绩。
(4)一维数据处理案例
需求:处理成绩列表scores = [85,92,78,95,88,75,90],完成:①计算平均分;②统计高于平均分的人数;③按降序排序。
代码演示:
scores = [85, 92, 78, 95, 88, 75, 90]
# 计算平均分
avg = sum(scores) / len(scores)
print("平均分:", round(avg, 2)) # round保留2位小数
# 统计高于平均分人数
count = 0
for s in scores:
if s > avg:
count += 1
# 或用生成器表达式:count = sum(1 for s in scores if s > avg)
print("高于平均分人数:", count)
# 降序排序
sorted_scores = sorted(scores, reverse=True)
print("排序后成绩:", sorted_scores)
3. 课堂练习(10分钟)
任务:给定列表nums = [12, 34, 21, 56, 43, 78, 65],编写程序:①计算中位数(排序后中间元素,若长度为奇数取第len//2个);②统计偶数的个数;③将所有元素乘以2后生成新列表。
4. 小结(5分钟)
回顾一维数据的两种表示形式(列表、元组)及核心操作,强调列表可修改、元组不可修改的区别,总结sum、len、sorted等内置函数的用法。
第三课时:二维数据与CSV文件读写
1. 导入(5分钟)
展示学生信息表:姓名、年龄、性别,提问:“如何用Python存储这样的表格数据?如何将表格数据保存到文件中?”引出主题:二维数据(表格形式)的表示及CSV文件(常用表格文件格式)的读写方法。
2. 新知识讲解(25分钟)
(1)二维数据的表示
用“列表嵌套列表”表示二维数据,外层列表的每个元素是一个一维列表(对应表格的一行)。示例:
# 学生信息表:表头+3行数据
students = [
["姓名", "年龄", "性别"],
["张三", 12, "男"],
["李四", 13, "女"],
["王五", 12, "男"]
]
访问方式:students[行索引][列索引],如students[1][0]→"张三"(第2行第1列)。
(2)二维数据的基本操作
添加行:students.append(["赵六", 13, "男"])(添加一行数据)。
修改元素:students[2][1] = 14(将李四年龄改为14)。
遍历:双重循环,外层遍历行,内层遍历列。
for row in students:
for col in row:
print(col, end="\t")
print() # 换行
(3)CSV文件读写(重点)
CSV(逗号分隔值)是通用表格文件格式,每行数据用逗号分隔,可用Excel打开。Python处理CSV需用到csv模块(内置,无需安装)。
① 读取CSV文件
准备“students.csv”文件,内容如下:
姓名,年龄,性别
张三,12,男
李四,13,女
王五,12,男
代码演示(两种方式):
import csv # 导入csv模块
# 方式1:用DictReader(读取为字典,表头为键)
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["姓名"], row["年龄"], row["性别"])
# 方式2:用reader(读取为列表,第一行为表头)
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
header = next(reader) # 获取表头
print("表头:", header)
for row in reader:
print(row[0], row[1], row[2])
② 写入CSV文件
需求:将学生列表写入新的CSV文件“new_students.csv”。
import csv
students = [
["姓名", "年龄", "性别"],
["赵六", 13, "男"],
["孙七", 12, "女"]
]
with open("new_students.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(students) # 写入多行
print("写入完成!")
强调:newline=""避免写入时出现空行,encoding="utf-8"确保中文正常显示。
3. 课堂练习(10分钟)
任务:读取“scores.csv”(内容:姓名,语文,数学;张三,85,92;李四,78,95;王五,88,75),计算每个学生的总分,将“姓名,语文,数学,总分”写入“scores_total.csv”。
4. 小结(5分钟)
回顾二维数据的列表嵌套表示及访问方式,总结csv模块的DictReader/reader(读取)和writer(写入)用法,强调文件操作的编码和newline参数问题。
第四课时:异常处理与算法基础(一)
1. 导入(5分钟)
运行代码:print(10/0),出现ZeroDivisionError;输入input("请输入数字:"),用户输入“abc”后用int()转换,出现ValueError。提问:“程序运行时出现错误就会崩溃,如何让程序更健壮?”引出主题:异常处理与基础算法(解析、枚举)。
2. 新知识讲解(25分钟)
(1)异常处理:try-except结构
① 基本语法
try:
# 可能出现异常的代码块
代码1
except 异常类型1:
# 捕获到异常类型1时执行的代码
代码2
except 异常类型2:
# 捕获到异常类型2时执行的代码
代码3
else:
# 无异常时执行的代码(可选)
代码4
finally:
# 无论是否异常都执行的代码(可选,如释放资源)
代码5
② 案例演示
需求:接收用户输入的两个整数,计算除法,处理除数为0和输入非整数的异常。
try:
a = int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))
result = a / b
except ValueError:
print("错误:请输入有效的整数!")
except ZeroDivisionError:
print("错误:除数不能为0!")
else:
print(f"{a} ÷ {b} = {result}")
finally:
print("程序执行完毕!")
强调:常见异常类型:ValueError(值错误)、ZeroDivisionError(除零错误)、FileNotFoundError(文件未找到错误)等;可省略异常类型捕获所有异常,但不推荐(不利于调试)。
(2)算法基础:解析与枚举
① 算法概念
算法:解决问题的步骤集合,如计算平均分、排序等都属于算法。好的算法具有高效、简洁的特点。
② 解析算法
定义:直接根据问题的公式或逻辑关系求解,如计算圆的面积(S=πr²)、平均分(总分/人数)。
案例:已知长方形周长C=20,长比宽多2,求长和宽。解析:设宽为x,长为x+2,2(x+x+2)=20→x=4,长=6。代码实现:
C = 20
# 设宽为x,长为x+2,2*(x + x+2) = C → x = (C/2 - 2)/2
width = (C/2 - 2) / 2
length = width + 2
print(f"长:{length},宽:{width}")
③ 枚举算法(穷举法)
定义:逐一列举所有可能的情况,判断是否符合条件,适合范围较小的问题。
案例:找出100以内所有能被3整除且个位数为6的数。代码实现:
result = []
for num in range(1, 101):
if num % 3 == 0 and num % 10 == 6:
result.append(num)
print("符合条件的数:", result)
3. 课堂练习(10分钟)
任务:① 用try-except处理读取文件时的FileNotFoundError,若文件不存在则提示“文件未找到”;② 用枚举法找出1-50中所有既是偶数又能被5整除的数。
4. 小结(5分钟)
回顾try-except结构的用法及常见异常类型,区分解析算法(公式逻辑)和枚举算法(穷举判断)的适用场景,强调枚举法的范围控制。
第五课时:算法基础(二)与综合练习
1. 导入(5分钟)
展示无序列表[34,12,56,23,45],提问:“如何将其按从小到大排序?如何快速找到其中的45?”引出主题:排序和查找算法,这是编程中最常用的基础算法,本节课学习其原理及Python实现。
2. 新知识讲解(25分钟)
(1)排序算法:冒泡排序与内置排序
① 冒泡排序原理
核心思想:重复遍历要排序的列表,每次比较相邻的两个元素,若顺序错误则交换,直到没有需要交换的元素(“冒泡”指大元素逐步“浮”到列表末尾)。
步骤演示(列表[34,12,56,23,45]):
第1轮:34与12交换→[12,34,56,23,45];34与56不换;56与23交换→[12,34,23,56,45];56与45交换→[12,34,23,45,56](最大数56冒泡到末尾)。
第2轮:12与34不换;34与23交换→[12,23,34,45,56];后续不换(次大数45冒泡到倒数第二位),排序完成。
代码实现:
nums = [34, 12, 56, 23, 45]
n = len(nums)
# 外层循环控制轮数
for i in range(n-1):
flag = True # 标记是否有交换,优化算法
# 内层循环控制每轮比较次数(每轮少比较1次)
for j in range(n-1 - i):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
flag = False
if flag:
break # 无交换则排序完成,提前退出
print("冒泡排序后:", nums)
② 内置排序函数
回顾sorted()函数,强调其效率高于手动实现的冒泡排序,实际开发中优先使用:
nums = [34, 12, 56, 23, 45]
sorted_nums = sorted(nums) # 升序
print("内置排序后:", sorted_nums)
(2)查找算法:顺序查找与二分查找
① 顺序查找
原理:从列表开头逐一查找目标元素,找到则返回索引,否则返回-1。适用于无序或小规模列表。
代码实现(查找目标45):
nums = [34, 12, 56, 23, 45]
target = 45
index = -1
for i in range(len(nums)):
if nums[i] == target:
index = i
break
print(f"目标{target}的索引:", index)
② 二分查找
原理:仅适用于有序列表,通过每次比较中间元素缩小查找范围(折半),效率高于顺序查找。
步骤演示(有序列表[12,23,34,45,56],查找45):
左边界left=0,右边界right=4,中间mid=2(元素34);45>34,left=mid+1=3。
mid=(3+4)//2=3(元素45),找到目标,返回索引3。
代码实现(递归版):
def binary_search(nums, target, left, right):
if left > right:
return -1 # 未找到
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
return binary_search(nums, target, mid+1, right)
else:
return binary_search(nums, target, left, mid-1)
nums = [12, 23, 34, 45, 56]
target = 45
index = binary_search(nums, target, 0, len(nums)-1)
print(f"二分查找目标{target}的索引:", index)
3. 综合练习(10分钟)
任务:编写程序,实现以下功能:① 读取“scores.csv”(姓名,分数);② 用try-except处理文件读取异常;③ 按分数降序排序;④ 接收用户输入的姓名,用顺序查找找到对应分数并输出,若未找到提示“未找到该学生”。
4. 小结与课程回顾(5分钟)
总结排序(冒泡排序、sorted())和查找(顺序、二分)算法的特点及适用场景,回顾前五课时核心知识点(数制转换、数据处理、文件操作、异常处理、算法),强调知识的综合应用。
五、作业设计
基础题:① 用Python实现十进制转二进制的手动计算(不使用bin());② 处理列表[23,45,18,37,56,72],计算平均分并筛选出80分以上的元素;③ 用try-except包装用户输入整数的代码,避免输入错误。
提高题:① 用冒泡排序对二维列表([[姓名,分数],[张三,85],...])按分数升序排序;② 用枚举法找出100-200中所有质数(只能被1和自身整除的数);③ 读取“products.csv”(商品名,价格,销量),计算每种商品的销售额(价格×销量),并写入“sales.csv”。
六、教学反思
数制转换的手动计算对部分学生较难,需多举简单案例,结合实物演示(如用小棒表示二进制进位)。
二维数据的索引访问易混淆行和列,可通过表格直观标记行号和列号。
算法部分需注重原理讲解,避免学生死记代码,可通过动画演示冒泡排序和二分查找的过程,增强理解。
课堂练习应分层设计,满足不同水平学生的需求,及时反馈并针对性指导薄弱环节。
[图片上传失败...(image-704eac-1764078250268)]
(注:文档部分内容可能由 AI 生成)