python三级考试

青少年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分钟)

布置任务:

  1. 手动计算十进制15转二进制、十六进制;二进制1111转十进制。

  2. 用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())和查找(顺序、二分)算法的特点及适用场景,回顾前五课时核心知识点(数制转换、数据处理、文件操作、异常处理、算法),强调知识的综合应用。

五、作业设计

  1. 基础题:① 用Python实现十进制转二进制的手动计算(不使用bin());② 处理列表[23,45,18,37,56,72],计算平均分并筛选出80分以上的元素;③ 用try-except包装用户输入整数的代码,避免输入错误。

  2. 提高题:① 用冒泡排序对二维列表([[姓名,分数],[张三,85],...])按分数升序排序;② 用枚举法找出100-200中所有质数(只能被1和自身整除的数);③ 读取“products.csv”(商品名,价格,销量),计算每种商品的销售额(价格×销量),并写入“sales.csv”。

六、教学反思

  1. 数制转换的手动计算对部分学生较难,需多举简单案例,结合实物演示(如用小棒表示二进制进位)。

  2. 二维数据的索引访问易混淆行和列,可通过表格直观标记行号和列号。

  3. 算法部分需注重原理讲解,避免学生死记代码,可通过动画演示冒泡排序和二分查找的过程,增强理解。

  4. 课堂练习应分层设计,满足不同水平学生的需求,及时反馈并针对性指导薄弱环节。

[图片上传失败...(image-704eac-1764078250268)]

(注:文档部分内容可能由 AI 生成)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容