青少年Python编程二级核心知识讲课教案
一、基本信息
授课对象:掌握Python入门知识(变量定义、基本输入输出、简单数据运算)的青少年
授课目标:掌握六大核心数据类型的基础用法,熟练运用选择结构和循环结构编写程序,能解决简单的编程问题
授课时长:5课时(每课时45分钟)
教学工具:Python编译器(IDLE、PyCharm Edu)、多媒体课件、案例代码文件
二、教学重难点
重点:列表/元组/字典/字符串的核心操作、range类型用法、单分支/二分支/多分支选择结构、for/while循环结构
难点:列表与元组的区别、字典的键值对操作、循环嵌套的逻辑、break与continue的灵活使用
三、课时安排
| 课时 | 核心内容 | 对应知识要点 |
|---|---|---|
| 1 | 核心数据类型(一):列表 | 一.2(列表基础用法及操作) |
| 2 | 核心数据类型(二):元组、字符串、range | 一.3、一.4、一.1、二.4 |
| 3 | 核心数据类型(三):字典、集合 | 一.1(字典、集合) |
| 4 | 控制语句(一):选择结构 | 二.1、二.2(单分支、二分支、多分支) |
| 5 | 控制语句(二):循环结构及综合练习 | 二.3、二.4(for/while循环、循环控制) |
四、详细教学过程
第一课时:核心数据类型(一)——列表
1. 导入(5分钟)
提问:“同学们,我们去超市购物时会列购物清单,清单里有多个物品,还能增减修改,Python中有没有类似‘清单’的数据类型呢?”引出主题:列表(list),它是Python中最常用的可变序列,能存储多个不同类型的数据,本节课学习列表的定义和核心操作。
2. 新知识讲解(25分钟)
(1)列表的定义与初始化
打开IDLE演示,讲解列表的创建方式:用方括号[]包裹元素,元素之间用逗号分隔,元素类型可混合(整数、字符串、数字等)。
# 示例1:存储购物清单(同类型元素)
shopping_list = ["苹果", "香蕉", "牛奶", "面包"]
# 示例2:存储学生信息(混合类型元素)
student_info = ["张三", 12, 95.5, True]
# 示例3:空列表
empty_list = []
print("购物清单:", shopping_list)
print("学生信息:", student_info)
(2)列表的核心操作
① 访问与更新元素
强调:列表元素通过“索引”访问,索引从0开始(即第一个元素索引为0),支持反向索引(最后一个元素为-1)。
shopping_list = ["苹果", "香蕉", "牛奶", "面包"]
# 访问第一个元素(索引0)
print("第一个物品:", shopping_list[0])
# 访问最后一个元素(反向索引-1)
print("最后一个物品:", shopping_list[-1])
# 更新元素(将"香蕉"改为"橙子")
shopping_list[1] = "橙子"
print("更新后的清单:", shopping_list)
② 获取长度与遍历元素
用len()函数获取列表长度,用for循环遍历所有元素。
shopping_list = ["苹果", "橙子", "牛奶", "面包"]
# 获取长度
print("清单物品数量:", len(shopping_list))
# 遍历元素(直接遍历值)
print("遍历清单:")
for item in shopping_list:
print("-", item)
# 遍历元素(索引+值,用enumerate)
print("带索引遍历:")
for index, item in enumerate(shopping_list):
print(f"索引{index}:{item}")
③ 添加与删除元素
讲解4个常用方法,结合购物清单案例演示:
shopping_list = ["苹果", "橙子", "牛奶"]
# 1. 末尾添加一个元素(append)
shopping_list.append("面包")
print("添加面包后:", shopping_list)
# 2. 指定位置插入元素(insert,索引1处插入"鸡蛋")
shopping_list.insert(1, "鸡蛋")
print("插入鸡蛋后:", shopping_list)
# 3. 删除指定值的元素(remove,删除"牛奶")
shopping_list.remove("牛奶")
print("删除牛奶后:", shopping_list)
# 4. 删除指定索引的元素(pop,删除最后一个元素)
shopping_list.pop()
print("删除最后一个元素后:", shopping_list)
④ 连接与排序
用+连接两个列表,用sort()排序(仅同类型元素可排序,如数字、字符串)。
# 列表连接
list1 = ["苹果", "香蕉"]
list2 = ["牛奶", "面包"]
combined_list = list1 + list2
print("连接后的列表:", combined_list)
# 排序(数字列表)
nums = [3, 1, 4, 2]
nums.sort() # 升序排序(直接修改原列表)
print("升序排序:", nums)
nums.sort(reverse=True) # 降序排序
print("降序排序:", nums)
3. 课堂练习(10分钟)
布置任务:创建一个成绩列表[85, 92, 78, 95, 88],完成以下操作:
将78改为80,打印更新后的列表。
在列表末尾添加90,在索引2处插入82。
遍历列表,打印所有成绩。
对列表进行降序排序,打印排序结果。
教师巡视指导,针对“索引越界”“排序类型不匹配”等问题集中讲解。
4. 小结(5分钟)
回顾列表的核心特点(可变、有序、元素类型可混合),总结关键操作:访问(索引)、更新(赋值)、添加(append/insert)、删除(remove/pop)、遍历(for循环)、排序(sort)。
第二课时:核心数据类型(二)——元组、字符串、range
1. 导入(5分钟)
展示两个场景:① 存储身份证号、生日等固定不变的信息;② 处理用户输入的姓名“张三”,需要提取姓氏。提问:“这两个场景用列表合适吗?有没有更合适的数据类型?”引出主题:元组(存储固定数据)、字符串(文本处理)、range(生成连续数字,为循环铺垫)。
2. 新知识讲解(25分钟)
(1)元组(tuple)
① 元组与列表的区别
核心区别:元组用圆括号()定义,不可修改(元素值和长度都不能变),适合存储固定数据;列表用[]定义,可修改。
② 元组的基础操作
# 1. 定义元组(圆括号,可省略,但建议加上)
id_info = ("110101", "2010-01-01", "男") # 身份证相关信息(固定)
single_tuple = (5,) # 单个元素的元组,必须加逗号(否则会被认为是整数)
# 2. 访问元素(与列表一致,用索引)
print("生日:", id_info[1])
# 3. 获取长度与遍历(与列表一致)
print("信息项数:", len(id_info))
print("遍历信息:")
for item in id_info:
print(item)
# 4. 元组不可修改(演示错误,帮助理解)
# id_info[1] = "2010-01-02" # 执行会报错:TypeError
# 5. 元组转换为列表(需要修改时,先转列表)
id_list = list(id_info)
id_list[1] = "2010-01-02"
new_id_info = tuple(id_list)
print("修改后转元组:", new_id_info)
(2)字符串(str)
字符串是字符的序列,用单引号或双引号包裹,核心操作聚焦分割、结合、替换、检索。
s = "Hello, Python! 你好,Python!"
# 1. 分割(split,按指定字符分割,默认按空格)
split_by_comma = s.split(",") # 按逗号分割
print("按逗号分割:", split_by_comma)
split_by_space = s.split() # 按空格分割
print("按空格分割:", split_by_space)
# 2. 结合(join,将列表转为字符串,用"-"连接)
word_list = ["Hello", "Python", "你好"]
joined_str = "-".join(word_list)
print("连接后:", joined_str)
# 3. 替换(replace,将"Python"改为"编程")
replaced_str = s.replace("Python", "编程")
print("替换后:", replaced_str)
# 4. 检索(find,查找"你好"的位置,返回首次出现的索引,未找到返回-1)
index = s.find("你好")
print("'你好'的索引:", index)
# 5. 获取长度(len函数)
print("字符串长度:", len(s))
(3)range类型
range用于生成连续的整数序列,常与for循环配合使用,语法:range(起始值, 结束值, 步长),注意“左闭右开”(包含起始值,不包含结束值)。
# 1. range(结束值):从0到结束值-1
for i in range(5):
print(i, end=" ") # 输出:0 1 2 3 4
print()
# 2. range(起始值, 结束值):从起始值到结束值-1
for i in range(2, 7):
print(i, end=" ") # 输出:2 3 4 5 6
print()
# 3. range(起始值, 结束值, 步长):步长为间隔,可正可负
for i in range(1, 10, 2):
print(i, end=" ") # 输出:1 3 5 7 9
print()
# 4. 转换为列表(查看range的所有元素)
range_list = list(range(3, 8))
print("range转列表:", range_list) # 输出:[3,4,5,6,7]
3. 课堂练习(10分钟)
布置任务:
定义元组week = ("周一", "周二", "周三", "周四", "周五"),遍历元组并打印每个元素。
定义字符串msg = "I like Python, I learn Python",将"Python"替换为"Python编程",并按逗号分割字符串。
用range生成10-20的偶数序列(步长2),转换为列表并打印。
4. 小结(5分钟)
总结三种类型的核心特点:元组(不可修改,()定义)、字符串(文本序列,分割替换为重点)、range(生成整数序列,配合循环使用),强调元组与列表的核心区别(可修改性)。
第三课时:核心数据类型(三)——字典、集合
1. 导入(5分钟)
展示学生信息:“张三,12岁,男,95分”,提问:“用列表存储是[‘张三’,12,‘男’,95],但要获取‘年龄’需要记索引1,有没有更直观的方式?”引出主题:字典(用“键值对”存储,键对应含义,值对应数据);再提问:“如何快速去掉列表中的重复元素?”引出集合(自动去重)。
2. 新知识讲解(25分钟)
(1)字典(dict)
① 字典的定义与特点
用大括号{}定义,格式:{键1:值1, 键2:值2,...},键必须是不可变类型(如字符串、整数),且唯一;值可以是任意类型。
# 定义学生信息字典(键:信息类型,值:具体内容)
student = {
"name": "张三",
"age": 12,
"gender": "男",
"score": 95
}
print("学生信息字典:", student)
② 字典的核心操作
student = {"name": "张三", "age": 12, "gender": "男", "score": 95}
# 1. 访问值(通过键访问,推荐用get()避免键不存在报错)
print("姓名:", student["name"])
print("年龄:", student.get("age"))
print("班级(键不存在,返回默认值'未填写'):", student.get("class", "未填写"))
# 2. 更新值(通过键赋值)
student["score"] = 98 # 更新分数
student["class"] = "6年级1班" # 新增键值对
print("更新后信息:", student)
# 3. 删除键值对(del)
del student["gender"]
print("删除性别后:", student)
# 4. 遍历字典(遍历键、值、键值对)
print("遍历键:")
for key in student.keys():
print(key)
print("遍历值:")
for value in student.values():
print(value)
print("遍历键值对:")
for key, value in student.items():
print(f"{key}:{value}")
(2)集合(set)
① 集合的定义与特点
用大括号{}或set()函数定义,特点:无重复元素、无序(不能用索引访问),适合去重和成员检查。
# 1. 定义集合(自动去重)
nums = {1, 2, 3, 2, 1} # 重复元素会被自动删除
print("去重后的集合:", nums)
# 2. 用列表转集合(去重常用方法)
score_list = [85, 92, 85, 78, 92]
score_set = set(score_list)
print("列表去重后:", score_set)
# 3. 空集合(不能用{},{}是空字典,需用set())
empty_set = set()
print("空集合:", empty_set)
② 集合的核心操作
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
# 1. 添加元素(add)
s1.add(5)
print("s1添加5后:", s1)
# 2. 删除元素(remove,删除不存在的元素会报错;discard不会报错)
s1.remove(2)
print("s1删除2后:", s1)
s1.discard(10) # 10不存在,不报错
# 3. 成员检查(判断元素是否在集合中,用in)
print("3在s1中吗?", 3 in s1)
# 4. 集合运算(交集、并集、差集)
print("交集(s1和s2共有的元素):", s1 & s2)
print("并集(s1和s2所有元素,去重):", s1 | s2)
print("差集(s1有但s2没有的元素):", s1 - s2)
3. 课堂练习(10分钟)
布置任务:
定义字典book = {"title": "Python入门", "author": "张三", "price": 39.9},添加“press”(出版社)键值对为“编程出版社”,遍历并打印所有键值对。
用集合对列表[1,3,2,3,1,4,5,4]去重,然后添加元素6,打印最终集合。
定义集合s3 = {2,4,6,8},s4 = {4,8,10,12},计算并打印两者的交集和并集。
4. 小结(5分钟)
总结字典与集合的核心用途:字典(键值对存储,直观表示关联数据)、集合(自动去重、成员检查、集合运算),强调字典的键不可变且唯一,集合无序无重复。
第四课时:控制语句(一)——选择结构
1. 导入(5分钟)
场景提问:“如果考试分数大于等于60分,就提示‘及格’,否则提示‘不及格’,这个逻辑怎么用Python实现?”引出主题:选择结构(根据条件判断执行不同代码),本节课学习单分支、二分支、多分支三种选择结构。
2. 新知识讲解(25分钟)
(1)选择结构的核心语法
强调:Python用缩进(4个空格)区分代码块,选择结构的关键字:if(如果)、elif(否则如果)、else(否则)。
(2)单分支结构(if)
语法:if 条件: 缩进的代码块(条件为True时执行,False时不执行)。
# 场景:如果年龄大于等于18,提示“成年”
age = int(input("请输入年龄:"))
if age >= 18:
print("你已成年!")
print("可以独立办理身份证。") # 同缩进,属于if代码块
print("程序结束。") # 无缩进,无论条件是否成立都执行
(3)二分支结构(if-else)
语法:if 条件: 条件成立执行的代码块;else: 条件不成立执行的代码块(二选一执行)。
# 场景:判断分数是否及格(60分及以上为及格)
score = int(input("请输入考试分数:"))
if score >= 60:
print("恭喜,考试及格!")
else:
print("很遗憾,考试不及格,需要补考。")
(4)多分支结构(if-elif-else)
语法:多个条件判断,依次检查,满足第一个条件后执行对应代码块,后续不再检查;所有条件都不满足则执行else代码块。
# 场景:根据分数评级(90+优秀,80-89良好,70-79中等,60-69及格,60以下不及格)
score = int(input("请输入考试分数:"))
if score >= 90:
grade = "优秀"
elif score >= 80: # 隐含条件:score<90
grade = "良好"
elif score >= 70: # 隐含条件:score<80
grade = "中等"
elif score >= 60: # 隐含条件:score<70
grade = "及格"
else: # 所有条件不满足,即score<60
grade = "不及格"
print(f"你的评级是:{grade}")
(5)选择结构嵌套
在选择结构内部再嵌套选择结构,处理更复杂的逻辑。
# 场景:判断是否成年,成年后再判断是否满22岁(男性结婚年龄参考)
age = int(input("请输入年龄:"))
gender = input("请输入性别(男/女):")
if age >= 18:
print("你已成年。")
if gender == "男" and age >= 22:
print("已达到男性法定结婚年龄。")
elif gender == "女" and age >= 20:
print("已达到女性法定结婚年龄。")
else:
print("未达到法定结婚年龄。")
else:
print("你尚未成年。")
3. 课堂练习(10分钟)
布置任务:编写程序,实现以下功能:
输入一个整数,判断其是否为正数(单分支或二分支)。
输入一个月份(1-12),判断季节(3-5春,6-8夏,9-11秋,12、1-2冬),用多分支结构。
教师巡视,重点指导“条件顺序”(多分支中先判断范围小的条件)和“缩进规范”问题。
4. 小结(5分钟)
回顾三种选择结构的适用场景:单分支(一个条件,满足则执行)、二分支(两种结果,二选一)、多分支(多种结果,多选一),强调缩进的重要性和多分支的条件顺序。
第五课时:控制语句(二)——循环结构及综合练习
1. 导入(5分钟)
场景提问:“如何让程序自动打印1到10的数字?如果要打印10遍‘我爱Python’,难道要写10行print语句吗?”引出主题:循环结构(重复执行一段代码),本节课学习for循环、while循环及循环控制语句break/continue。
2. 新知识讲解(25分钟)
(1)for循环
语法:for 变量 in 可迭代对象(如range、列表、字符串): 缩进的循环体,用于“已知循环次数”的场景。
# 示例1:用range打印1-10(已知循环10次)
print("1-10的数字:")
for i in range(1, 11):
print(i, end=" ")
print()
# 示例2:遍历列表(打印购物清单)
shopping_list = ["苹果", "香蕉", "牛奶"]
print("购物清单:")
for item in shopping_list:
print(f"购买:{item}")
# 示例3:循环嵌套(打印99乘法表前3行)
print("99乘法表前3行:")
for i in range(1, 4):
for j in range(1, i+1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
(2)while循环
语法:while 条件: 缩进的循环体,用于“未知循环次数,已知循环条件”的场景,需注意避免“死循环”(条件永远为True)。
# 示例1:打印1-10(条件:i<=10)
i = 1 # 初始化循环变量
print("1-10的数字(while):")
while i <= 10:
print(i, end=" ")
i += 1 # 更新循环变量(必须有,否则死循环)
print()
# 示例2:猜数字游戏(未知循环次数,直到猜对为止)
import random
secret_num = random.randint(1, 10) # 生成1-10随机数
guess_count = 0
print("猜数字游戏(1-10):")
while True: # 无限循环,用break退出
guess = int(input("请猜一个数字:"))
guess_count += 1
if guess == secret_num:
print(f"恭喜猜对了!共猜了{guess_count}次。")
break # 退出循环
elif guess < secret_num:
print("太小了,再猜大一点!")
else:
print("太大了,再猜小一点!")
(3)循环控制语句:break与continue
break:立即退出当前循环(跳出循环体)。
continue:跳过当前循环的剩余代码,直接开始下一次循环。
# 示例1:break的使用(打印1-10,遇到5退出)
print("break示例:")
for i in range(1, 11):
if i == 5:
break
print(i, end=" ") # 输出:1 2 3 4
print()
# 示例2:continue的使用(打印1-10,跳过偶数)
print("continue示例:")
for i in range(1, 11):
if i % 2 == 0:
continue
print(i, end=" ") # 输出:1 3 5 7 9
3. 综合练习(10分钟)
布置任务:编写程序,实现“成绩统计”功能:
用循环让用户输入5个学生的成绩(用列表存储)。
用循环遍历列表,计算平均分。
用选择结构判断平均分是否大于等于85,若是则打印“优秀班级”,否则打印“良好班级”。
4. 小结与课程回顾(5分钟)
总结循环结构:for循环适合已知次数,while循环适合已知条件;break退出循环,continue跳过本次循环。回顾全课程核心知识:六大数据类型的用法、选择与循环控制语句,强调“数据类型是基础,控制语句是逻辑核心”。
五、作业设计
基础题:① 定义列表scores = [78, 92, 85, 65, 98, 75],用循环计算总分和平均分;② 用多分支结构判断输入的年份是否为闰年(能被4整除但不能被100整除,或能被400整除);③ 用for循环和range打印100以内的所有3的倍数。
提高题:① 用字典存储3个学生的信息(姓名、语文、数学成绩),遍历字典计算每个学生的总分;② 用while循环实现“打印1到50,遇到能被7整除的数跳过,遇到50退出”;③ 用循环嵌套打印一个5行5列的“*”正方形。
六、教学反思
数据类型部分:学生易混淆字典与列表的访问方式,需多通过对比案例强化;元组的不可修改性可通过“修改报错”的演示加深印象。
控制语句部分:循环嵌套和break/continue的使用是难点,可通过分步调试(打印中间变量)帮助学生理解执行流程。
实操性:青少年学习编程需多动手,课堂练习应预留充足时间,对操作较慢的学生进行一对一指导,确保每个学生掌握基础操作。
案例设计:应多采用学生熟悉的场景(成绩、购物、游戏),降低理解难度,提高学习兴趣。
[图片上传失败...(image-22230b-1764078798688)]
(注:文档部分内容可能由 AI 生成)