py编程基础及导论 2_第1页
py编程基础及导论 2_第2页
py编程基础及导论 2_第3页
py编程基础及导论 2_第4页
py编程基础及导论 2_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AI生成AI生成第5章数据类型进阶共6个课时

[理论课]L9列表list教学课题Python列表(list)数据类型——创建、操作、增删改查与切片教学对象师范专业本科生(零基础)教学时数2学时(90分钟)对应教材第5章§5.1list列表教学目标•理解列表的概念,掌握列表的创建与基本属性(有序、可变、异构)。•熟练使用列表的索引访问与切片操作。•掌握列表的增删改查方法:append()、insert()、pop()、remove()、sort()、reverse()等。•能够运用列表解决实际任务驱动问题,如成绩管理、数据统计等。•体会列表在教育数据处理中的应用价值。教学重点与难点重点•列表的创建与索引访问(正索引与负索引)。•列表切片语法list[start:stop:step]的理解与运用。•列表常用方法:append、insert、remove、pop、sort。•列表与for循环的配合使用。难点•切片操作中start、stop、step为负数时的含义。•sort()与sorted()的区别(原地修改vs返回新列表)。•列表浅拷贝与赋值的区别(=赋值共享引用)。教学过程

课程导入——为什么需要列表?(约10分钟)

回顾已学变量只能存储一个值。提出问题:如果要存储全班40人的数学成绩,是否要定义40个变量?引出"容器"概念——列表就像一排带编号的储物柜,可以按编号存取多个数据。展示生活类比:购物清单、班级花名册都是"列表"。引入Python内置类型list。

列表的创建与基本属性(约15分钟)

讲解创建方式:方括号语法[元素1,元素2,...]、list()转换、range()生成。强调列表三大特征:有序(有索引)、可变(可修改元素)、异构(可存不同类型)。演示获取长度len(),访问元素list[index],负索引list[-1]表示最后一个元素。类比数学数列帮助学生理解。

列表切片操作(约15分钟)

讲解切片语法list[start:stop:step]。通过大量演示帮助学生建立直觉:list[2:5]取第3到5个元素;list[:3]取前三个;list[::2]每隔一个取一个;list[::-1]反转列表。注意切片是"左闭右开"区间。在黑板上画出索引示意图,用彩色标注截取范围。提醒学生:切片产生新列表,原列表不变。

列表的增删改操作(约20分钟)

逐个演示并对比:修改元素list[i]=新值;添加末尾append();指定位置插入insert(i,元素);删除末尾pop();删除指定位置pop(i);删除指定值remove(值)。通过一个"班级成绩管理"任务串联以上操作:添加新同学成绩、修改错误成绩、删除退学同学。引导学生思考pop()的返回值特性。

列表排序与统计方法(约15分钟)

讲解sort()(原地排序)与sorted()(返回新列表)的区别与适用场景。演示reverse()反转、count()计数、index()查找。引入关键字参数reverse=True实现降序排序。提醒学生注意:数字列表与字符串列表排序规则不同。示例:对一组考试成绩排序并找出最高分。

列表与循环、列表推导式初探(约10分钟)

演示foriteminlist:遍历列表。引入enumerate获取索引和值:fori,vinenumerate(list):。简单介绍列表推导式[表达式for变量in可迭代对象]作为"预告",让学生感受Python的简洁优雅。示例:快速生成1~10的平方数列表。

课堂小结与答疑(约5分钟)

总结本节课核心知识点:列表创建、索引、切片、增删改查方法。展示"列表方法速查表"。强调易错点:切片左闭右开、append与extend的区别、赋值与拷贝的差异。预告下节课将学习元组和字典。

代码示例#示例1:创建列表与基本操作

scores=[92,85,78,96,88,73,91]

print(scores)#[92,85,78,96,88,73,91]

print(len(scores))#7

print(scores[0])#92(第一个元素)

print(scores[-1])#91(最后一个元素)

#示例2:切片操作

print(scores[1:4])#[85,78,96]左闭右开

print(scores[::2])#[92,78,88,91]每隔一个

print(scores[-3:])#[88,73,91]最后三个

print(scores[::-1])#[91,73,88,96,78,85,92]反转

#示例3:增删改操作——班级成绩管理

scores.append(89)#末尾添加新同学成绩

scores.insert(2,82)#在索引2处插入成绩

scores[3]=80#修改第4个成绩

scores.remove(73)#删除值为73的成绩

last=scores.pop()#弹出末尾成绩,返回89

#示例4:排序与统计

scores.sort()#原地升序排序

print(scores)#[78,80,82,85,88,91,92,96]

print(scores[-1])#96最高分

print(sum(scores)/len(scores))#86.0平均分

#示例5:列表与循环

fori,sinenumerate(scores,1):

print(f"第{i}位同学:{s}分")

#示例6:列表推导式(初探)

squares=[x**2forxinrange(1,11)]

print(squares)#[1,4,9,16,25,36,49,64,81,100]课堂练习1.创建一个包含5种水果名称的列表,使用切片获取前3种和后2种水果。2.编写程序:输入5个整数存入列表,计算并输出它们的和、平均值、最大值和最小值。3.给定列表[3,1,4,1,5,9,2,6,5],去重后升序排列,输出结果。课后作业1.编写程序,输入一组学生姓名(用空格分隔),存储到列表中,按字母顺序排序后输出。2.生成包含20个随机整数(范围1~100)的列表,统计其中偶数和奇数的个数。3.(思考题)a=[1,2,3];b=a;b[0]=99后,a的值是什么?为什么?如何让b成为a的独立副本?教学反思列表是Python中使用频率最高的数据结构之一,也是后续学习字典、函数参数等内容的基石。教学中应多用生活类比(购物清单、排队)降低理解门槛。切片操作是学生最容易出错的部分,建议在黑板上画索引图进行可视化演示。可以适当引入VSCode的调试功能,让学生在变量窗口中实时观察列表的变化,加深对可变类型的理解。──────────────────────────────────────────────────[理论课]L10元组tuple与字典dict教学课题Python元组(tuple)与字典(dict)——不可变序列与键值对映射教学对象师范专业本科生(零基础)教学时数2学时(90分钟)对应教材第5章§5.2tuple元组、§5.3dict字典教学目标•理解元组的概念及其与列表的区别(不可变性),掌握元组的创建与操作。•理解字典的概念——键值对(key-value)映射,掌握字典的创建与操作。•能够根据实际需求选择合适的数据结构:列表、元组或字典。•运用字典解决教育数据处理中的查找与映射问题。教学重点与难点重点•元组的创建(圆括号语法)、索引访问、解包。•字典的创建(花括号语法)、键值对访问dict[key]。•字典的增删改查:dict[key]=value、del、get()、keys()、values()、items()。•字典与for循环的配合使用。难点•理解元组"不可变"的含义及其实际意义(安全性、可哈希)。•字典键的唯一性与不可变性(键必须是可哈希类型)。•dict.get(key,default)与dict[key]的区别。教学过程

温故知新——从列表到元组(约5分钟)

快速回顾列表的可变性。提出思考:如果我们希望数据创建后不被修改(如身份证号、坐标点),应该怎么办?引出元组——"不可变的列表"。

元组的创建与操作(约20分钟)

讲解元组创建:(元素1,元素2,...),单个元素元组需加逗号(42,)。演示元组的索引访问、切片(与列表类似)、len()、in运算符。重点讲解"不可变性":t[0]=99会报TypeError。讨论元组不可变的意义:数据安全、可作为字典的键。演示元组解包:a,b,c=(1,2,3),以及交换变量a,b=b,a。类比:元组像刻在石头上的名单,列表像写在白板上的名单。

列表与元组对比小结(约5分钟)

用表格对比列表与元组:语法(方括号vs圆括号)、可变性(可变vs不可变)、性能(列表稍慢vs元组稍快)、使用场景(动态数据vs常量数据)。强调选择原则:数据需要修改用列表,不需要修改用元组。

字典的引入——从查号到映射(约10分钟)

提出问题:如何存储"学号—姓名"的对应关系?列表只存值、不存关系。引出字典——"键值对"数据结构。类比:字典就像通讯录(姓名→电话)、查字典(拼音→汉字)。讲解创建语法:{key1:value1,key2:value2,...}、dict()函数。

字典的基本操作(约25分钟)

演示:通过键访问值dict[key];添加/修改键值对dict[key]=value;删除键值对deldict[key]、dict.pop(key);安全访问dict.get(key,默认值)。演示遍历:forkeyindict:、dict.keys()、dict.values()、dict.items()。通过"学生信息管理系统"案例串联:录入学生成绩、查询成绩、修改成绩、统计人数。特别强调:字典的键必须是不可变类型(str、int、tuple),列表不能做键。

字典的嵌套与实际应用(约15分钟)

演示字典嵌套字典(学生信息含姓名、年龄、成绩)和字典嵌套列表(一个键对应多个值)。通过案例展示:用字典实现简单的"成绩分析器"——统计各分数段人数。讲解dict.setdefault()和collections.Counter(简要提及)。

课堂小结与答疑(约10分钟)

对比总结三种数据结构:列表(有序可变)、元组(有序不可变)、字典(无序键值对)。展示选择决策流程图:需要索引顺序?→列表/元组;需要名称映射?→字典;数据会变?→列表/字典;数据不变?→元组。预告下节课:字符串的深入探索。

代码示例#=====元组部分=====

#创建元组

point=(3,5)

rgb=(255,128,0)

single=(42,)#单元素元组必须加逗号

#索引与切片

print(point[0])#3

print(point[-1])#5

#元组解包

x,y=point

print(f"坐标:({x},{y})")#坐标:(3,5)

#交换变量(利用元组解包)

a,b=10,20

a,b=b,a

print(a,b)#2010

#=====字典部分=====

#创建字典

students={

"张三":92,

"李四":85,

"王五":78,

"赵六":96,

}

#访问与修改

print(students["张三"])#92

students["王五"]=88#修改成绩

students["孙七"]=91#添加新学生

#安全访问(避免KeyError)

print(students.get("周八","未找到"))#未找到

#遍历字典

forname,scoreinstudents.items():

print(f"{name}:{score}分")

#删除键值对

delstudents["李四"]

print(students)

#统计各分数段人数

grades={"优秀":0,"良好":0,"及格":0,"不及格":0}

forscoreinstudents.values():

ifscore>=90:

grades["优秀"]+=1

elifscore>=80:

grades["良好"]+=1

elifscore>=60:

grades["及格"]+=1

else:

grades["不及格"]+=1

print(grades)课堂练习1.创建一个元组存储一周七天的英文名称,使用解包分别赋值给7个变量,并打印Wednesday。2.创建一个字典存储5个城市的拼音与人口(万),实现查询、添加、删除功能,最后遍历输出所有城市信息。3.编写程序:输入一段英文,统计每个字母出现的次数,结果存入字典并输出。课后作业1.用字典实现简易"英汉词典":预存至少10个单词,用户输入英文单词,输出对应中文释义;若不存在则提示。2.建立一个包含学生姓名和三门课程成绩的字典(字典嵌套字典),计算每位同学的平均分并输出排名。3.(思考题)能否用列表[1,2]作为字典的键?(1,2)呢?为什么?教学反思元组的"不可变性"对学生来说是较新的概念,可以通过"把数据锁起来"的比喻帮助理解。字典是本课程最重要的数据结构之一,建议多花时间在字典遍历和嵌套上,这对后续跨学科案例至关重要。练习中"字母频率统计"是很好的综合练习,同时复习了字符串和字典。可以展示字典在实际应用中的价值(如配置管理、数据记录),增强学生的代入感。──────────────────────────────────────────────────[理论课]L11字符串str教学课题Python字符串(str)数据类型——操作、常用方法与切片教学对象师范专业本科生(零基础)教学时数2学时(90分钟)对应教材第5章§5.4str字符串教学目标•深入理解字符串的本质——有序的字符序列(不可变)。•掌握字符串的创建方式与转义字符。•熟练运用字符串常用方法:查找、替换、分割、连接、大小写转换、去除空白等。•掌握字符串切片操作,能够灵活提取子串。•掌握格式化输出(f-string)的高级用法。•能够综合运用字符串方法完成文本处理任务。教学重点与难点重点•字符串的不可变性及其含义。•常用方法:find()、replace()、split()、join()、strip()、upper()、lower()。•字符串切片与列表切片的统一性。•f-string格式化输出。难点•字符串不可变性——所有"修改"操作都返回新字符串。•split()与join()的配合使用(互逆操作)。•str方法的链式调用(如s.strip().lower().split())。教学过程

课程导入——字符串无处不在(约5分钟)

回顾前几章已经在使用字符串(print("Hello")、input()等)。说明字符串是Python中使用最广泛的数据类型之一。在数据分析、自然语言处理、网页爬取等场景中,字符串处理是核心技能。引出本节课主题:深入探索字符串。

字符串基础与不可变性(约15分钟)

复习字符串创建方式:单引号、双引号、三引号(多行字符串)。讲解转义字符:\n(换行)、\t(制表符)、\\(反斜杠)、\"(引号)。强调字符串的不可变性:s[0]="H"会报错,字符串与元组一样是不可变序列。所有"修改"操作(替换、拼接等)都产生新字符串。类比:字符串像印刷在纸上的文字,修改只能重新印刷。

字符串切片操作(约10分钟)

字符串切片与列表切片语法完全一致:s[start:stop:step]。快速演示:提取子串、反转字符串s[::-1]、隔字符取s[::2]。强调切片返回新字符串。演示实际应用:从身份证号中提取出生年月日。

字符串查找与替换方法(约15分钟)

逐个讲解:查找子串位置find()(返回索引,找不到返回-1)、count()(计数)、startswith()/endswith()(判断首尾)。替换replace(old,new)——注意返回新字符串,原串不变。通过案例演示:在一段文本中查找并替换敏感词。

字符串分割与连接(约15分钟)

重点讲解split()(按分隔符拆分为列表)和join()(用分隔符连接列表为字符串)。强调两者是互逆操作:"-".join(s.split("-"))还原。演示实际案例:解析CSV格式数据行、拼接文件路径。讲解strip()、lstrip()、rstrip()去除首尾空白。演示链式调用:text.strip().lower().split(",")。

大小写转换与格式化输出(约15分钟)

讲解:upper()、lower()、title()、capitalize()。深入讲解f-string:f"姓名:{name},年龄:{age}";格式控制{score:.1f}(一位小数)、{num:05d}(五位数补零)、{name:>10}(右对齐宽度10)。演示应用:格式化输出成绩单表格。

综合案例与课堂小结(约15分钟)

综合案例:编写简易"文本分析器"——输入一段英文,统计单词数、字符数(不含空格)、最长的单词、所有单词转大写输出。回顾本节课方法清单,强调字符串方法众多但逻辑清晰(查找类、修改类、判断类、格式类)。预告下节课进入函数的世界。

代码示例#示例1:字符串基础与不可变

s="Hello,Python!"

print(s[0])#H

print(s[-1])#!

print(len(s))#14

#s[0]="h"#TypeError:字符串不可变!

#示例2:字符串切片

print(s[7:13])#Python

print(s[::-1])#!nohtyP,olleH反转字符串

#示例3:身份证号提取出生日期

id_card=

birth=id_card[6:14]#"20050315"

year=id_card[6:10]#"2005"

print(f"出生日期:{birth[:4]}年{birth[4:6]}月{birth[6:]}日")

#示例4:查找与替换

text="Pythonisgreat.Pythoniseasy."

print(text.find("great"))#10

print(text.count("Python"))#2

print(text.startswith("Py"))#True

new_text=text.replace("Python","Java")

print(new_text)

#示例5:分割与连接

csv_line="张三,92,85,78"

parts=csv_line.split(",")

print(parts)#['张三','92','85','78']

words=["Hello","World","Python"]

print("".join(words))#HelloWorldPython

print("-".join(words))#Hello-World-Python

#示例6:strip与链式调用

dirty="Hello,World\n"

print(dirty.strip())#"Hello,World"

data="apple,banana,cherry"

fruits=data.strip().lower().split(",")

print(fruits)#['apple','banana','cherry']

#示例7:格式化输出

name="张三"

score=92.567

print(f"姓名:{name},成绩:{score:.1f}分")#成绩:92.6分

print(f"编号:{1:03d}")#编号:001

#示例8:综合案例——简易文本分析

text="Thequickbrownfoxjumpsoverthelazydog"

words=text.split()

print(f"单词数:{len(words)}")

print(f"字符数(不含空格):{len(text.replace('',''))}")

longest=max(words,key=len)

print(f"最长单词:{longest}")课堂练习1.输入一个身份证号(18位),提取并输出出生年月日和性别(第17位奇数为男,偶数为女)。2.输入一句英文,统计其中元音字母(a/e/i/o/u,不区分大小写)出现的次数。3.将字符串"helloworldpythonprogramming"中每个单词首字母大写后输出。课后作业1.编写程序:输入一个英文句子,输出其中出现频率最高的单词及其出现次数。2.编写一个简易"密码强度检测器":输入密码字符串,检测长度是否>=8、是否包含大写字母、小写字母、数字和特殊字符,给出强度等级。3.编写程序:将一首诗(多行字符串)中所有标点符号去除,统计每个汉字的出现频率,按频率降序输出。教学反思字符串是学生从入门到进阶的关键过渡点。许多学生在理解字符串方法后,面对实际文本处理任务仍然无从下手。建议教学中加强"方法组合"的训练——将多个简单方法串联完成复杂任务。身份证号解析是一个很好的贴近生活的案例,能让学生体会到编程的实用价值。f-string是Python3.6+推荐使用的格式化方式,应作为重点教学,同时简要提及其他格式化方式(%格式化、format方法)作为补充知识。──────────────────────────────────────────────────[实践课]P9列表操作与数据处理实践课题列表创建、索引、切片与增删改查教学对象师范专业本科生(零基础)教学时数2学时(90分钟)实践环境计算机机房,预装Python3.x实践目标•掌握列表的多种创建方式(直接定义、list()转换、列表推导式)•熟练使用列表索引与切片操作访问和提取数据•掌握列表的增删改查操作(append、insert、remove、pop、修改等)•能够运用列表处理简单的数据处理任务(排序、统计、筛选)•理解列表的可变性,能在实际场景中灵活应用列表实践内容与步骤

知识回顾与导入(约10分钟)

教师简要回顾上节课讲解的列表基础概念,演示几个列表操作的示例。学生在自己的电脑上跟随操作,确保Python环境正常。打开IDLE或VSCode,创建一个新文件practice_p9.py,准备记录本节课的所有代码。

列表创建与基本操作(约15分钟)

练习列表的多种创建方式:直接用方括号定义、使用list()函数转换、使用range()生成、使用列表推导式。尝试创建包含不同类型元素的列表,观察type()和len()的返回值。体验空列表的创建方式。

索引与切片练习(约20分钟)

使用正索引和负索引访问列表元素;练习切片操作list[start:stop:step],理解步长的含义;尝试省略参数的各种写法;完成以下练习:

(1)给定一个包含10个元素的列表,分别取出前3个、后3个、奇数位置元素。

(2)将一个列表反转。

(3)将一个字符串转换为字符列表,取出其中的元音字母。

增删改查操作实战(约20分钟)

分别使用append()、insert()、extend()向列表添加元素;使用remove()、pop()、del删除元素;通过索引直接修改元素;使用in运算符和index()方法查找元素;使用count()统计出现次数。注意观察每一步操作后列表的变化。

列表排序与统计应用(约15分钟)

练习sort()(原地排序)和sorted()(返回新列表)的区别;使用reverse()反转列表;利用min()、max()、sum()进行数据统计;完成一个综合小练习:给定一组学生的考试分数,计算平均分、最高分、最低分,并按分数从高到低排序。

综合任务与总结(约10分钟)

学生完成实践任务书中的综合任务,教师巡视指导并答疑。最后5分钟,教师选取2-3名同学的代码进行展示和点评,总结本节课常见错误和注意事项。

实践任务书

任务:班级成绩管理器

请编写一个Python程序,实现以下功能:

1.创建一个包含10名学生姓名的列表和一个对应的数学成绩列表(70~100之间的随机整数)。

2.使用切片输出前三名学生的姓名和成绩。

3.添加一名新转学生的姓名和成绩到列表末尾。

4.删除成绩不及格(低于60分)的学生记录。

5.计算全班平均分,输出最高分和最低分对应的学生姓名。

6.将成绩列表按从高到低排序,同时保持姓名列表与成绩列表的对应关系。

要求:

-所有功能在一个Python文件中完成,代码有适当的中文注释。

-每个功能步骤之间用print("---分隔线---")隔开,输出格式清晰。

-不得使用本节课未涉及的第三方库。

参考代码#P9实践课-班级成绩管理器

importrandom

#1.创建学生姓名列表和成绩列表

names=["张三","李四","王五","赵六","孙七",

"周八","吴九","郑十","陈一一","林二二"]

scores=[random.randint(70,100)for_inrange(10)]

print("原始数据:")

foriinrange(len(names)):

print(f"{names[i]}:{scores[i]}分")

print("---分隔线---")

#2.切片输出前三名学生

print("前三名学生:")

foriinrange(3):

print(f"{names[i]}:{scores[i]}分")

print("---分隔线---")

#3.添加新转学生

names.append("黄新")

scores.append(85)

print("添加新学生后:",names[-1],scores[-1])

print("---分隔线---")

#4.删除不及格学生(本例中成绩均>=70,此处演示逻辑)

#若要测试,可手动添加一个低分:scores.append(45);names.append("测试")

i=0

whilei<len(scores):

ifscores[i]<60:

names.pop(i)

scores.pop(i)

else:

i+=1

print("删除不及格后剩余人数:",len(names))

print("---分隔线---")

#5.统计信息

avg=sum(scores)/len(scores)

max_score=max(scores)

min_score=min(scores)

max_idx=scores.index(max_score)

min_idx=scores.index(min_score)

print(f"平均分:{avg:.1f}")

print(f"最高分:{names[max_idx]}{max_score}分")

print(f"最低分:{names[min_idx]}{min_score}分")

print("---分隔线---")

#6.按成绩从高到低排序(保持对应关系)

paired=list(zip(names,scores))

paired.sort(key=lambdax:x[1],reverse=True)

print("排名(从高到低):")

forrank,(name,score)inenumerate(paired,1):

print(f"第{rank}名:{name}{score}分")评价标准评价维度优秀(90-100)良好(75-89)合格(60-74)列表创建能灵活使用多种创建方式,包括列表推导式能正确使用至少两种创建方式能使用基本方括号方式创建索引与切片熟练运用正/负索引和多种切片写法能正确使用基本索引和简单切片能使用正索引访问元素增删改查能综合使用多种方法,处理边界情况能使用基本的增删改查操作能完成至少两种基本操作排序与统计理解sort/sorted区别,实现关联排序能完成基本排序和统计能使用min/max/sum代码规范注释完整,输出格式清晰美观有基本注释,输出清晰代码可运行,输出基本可读拓展挑战

挑战任务:使用列表推导式实现"成绩等级划分"——给定一组成绩,自动生成一个对应的等级列表(A:90-100,B:80-89,C:70-79,D:60-69,F:<60),并统计各等级人数。尝试用enumerate()同时输出学号和成绩。

──────────────────────────────────────────────────[实践课]P10字典与元组综合应用实践课题字典键值对操作、元组解包与学生信息管理教学对象师范专业本科生(零基础)教学时数2学时(90分钟)实践环境计算机机房,预装Python3.x实践目标•掌握字典的创建、访问、修改和删除操作•理解字典的常用方法:keys()、values()、items()、get()、update()等•理解元组的不可变性,掌握元组的创建和解包操作•能够综合运用字典和元组构建学生信息管理系统•理解字典与列表的嵌套使用,处理结构化数据实践内容与步骤

知识回顾与导入(约10分钟)

教师回顾字典和元组的核心概念,对比字典(键值对、可变)与元组(有序、不可变)的特点。演示用字典存储个人信息、用元组表示坐标的示例。学生创建文件practice_p10.py。

字典基础操作练习(约20分钟)

练习字典的创建方式:直接用花括号{}、使用dict()构造函数、用zip()从两个列表生成字典。练习通过键访问值(dict[key]和dict.get(key)的区别)、添加新键值对、修改已有值、删除键值对(del、pop())。遍历字典的键、值和键值对。

元组创建与解包练习(约15分钟)

创建各种元组:空元组、单元素元组(注意逗号)、多元素元组;通过索引访问元组元素(正索引和负索引);练习元组解包:a,b,c=(1,2,3);使用星号表达式进行扩展解包:a,*rest=(1,2,3,4);尝试修改元组元素,观察TypeError异常。体验元组作为字典键的使用场景。

字典嵌套与数据结构设计(约20分钟)

练习用字典的值嵌套列表或其他字典。例如,设计一个"课程信息"字典,其中每个课程名对应一个包含学生列表和平均分的字典。练习setdefault()和defaultdict的使用场景。完成小练习:统计一段文字中每个单词出现的次数(用字典实现)。

学生信息管理综合练习(约15分钟)

用字典列表(列表中每个元素是一个字典)存储多个学生的完整信息:学号、姓名、年龄、三门课程成绩。实现以下操作:添加新学生、按学号查询学生、修改学生信息、删除学生、计算每个学生的平均成绩并排名。将每个学生的成绩信息用元组保存以提高安全性。

任务完成与展示总结(约10分钟)

学生完成实践任务书中的综合任务。教师巡视指导,重点帮助理解字典嵌套和元组解包的用法。选取代表性作品展示,总结字典和元组在实际编程中的应用场景。

实践任务书

任务:学生信息管理系统(字典与元组版)

请编写一个Python程序,使用字典和元组实现一个简易学生信息管理系统,功能要求如下:

1.初始化至少5名学生数据,每名学生用字典存储,包含键:学号(str)、姓名(str)、年龄(int)、成绩(tuple,包含语文/数学/英语三科成绩)。

2.实现查询功能:输入学号,输出该学生的全部信息。

3.实现添加功能:添加一个新学生到系统中。

4.实现统计功能:计算全班每科的平均分和每个学生的总分,按总分从高到低输出排名。

5.实现筛选功能:找出总分超过270分的学生,输出他们的姓名和总分。

要求:

-成绩用元组存储,保证数据不会被意外修改。

-学生列表用列表存储,学生信息用字典存储。

-代码结构清晰,每个功能用注释标明,输出格式规范。

参考代码#P10实践课-学生信息管理系统(字典与元组版)

#1.初始化学生数据

students=[

{"学号":"2024001","姓名":"张三","年龄":20,

"成绩":(92,88,95)},

{"学号":"2024002","姓名":"李四","年龄":21,

"成绩":(78,85,82)},

{"学号":"2024003","姓名":"王五","年龄":19,

"成绩":(95,92,98)},

{"学号":"2024004","姓名":"赵六","年龄":20,

"成绩":(65,72,70)},

{"学号":"2024005","姓名":"孙七","年龄":22,

"成绩":(88,90,85)},

]

print("===学生信息管理系统===")

print("---分隔线---")

#2.查询功能

search_id="2024003"

found=False

forsinstudents:

ifs["学号"]==search_id:

print(f"查询结果:姓名={s['姓名']},年龄={s['年龄']},"

f"语文={s['成绩'][0]},数学={s['成绩'][1]},英语={s['成绩'][2]}")

found=True

ifnotfound:

print("未找到该学生")

print("---分隔线---")

#3.添加功能

new_student={"学号":"2024006","姓名":"周八",

"年龄":20,"成绩":(91,87,93)}

students.append(new_student)

print(f"已添加学生:{new_student['姓名']}")

print("---分隔线---")

#4.统计与排名

#计算全班每科平均分

chinese_avg=sum(s["成绩"][0]forsinstudents)/len(students)

math_avg=sum(s["成绩"][1]forsinstudents)/len(students)

english_avg=sum(s["成绩"][2]forsinstudents)/len(students)

print(f"全班平均:语文={chinese_avg:.1f},"

f"数学={math_avg:.1f},英语={english_avg:.1f}")

#按总分排名

ranked=sorted(students,

key=lambdas:sum(s["成绩"]),reverse=True)

print("总分排名:")

forrank,sinenumerate(ranked,1):

total=sum(s["成绩"])

print(f"第{rank}名:{s['姓名']}总分={total}")

print("---分隔线---")

#5.筛选总分超过270分的学生

print("总分超过270分的学生:")

forsinstudents:

total=sum(s["成绩"])

iftotal>270:

print(f"{s['姓名']}:{total}分")评价标准评价维度优秀(90-100)良好(75-89)合格(60-74)字典操作熟练使用多种字典方法,能处理嵌套结构能正确使用基本字典操作能创建字典并访问值元组使用合理使用元组保护数据,解包操作熟练能创建元组并理解不可变性能创建基本元组综合应用字典+元组+列表组合使用,逻辑完整能完成基本的增删查功能能完成至少两个功能数据统计排名和筛选逻辑正确,输出格式规范能完成基本统计计算能计算总分代码规范结构清晰,注释详尽,命名规范有基本注释,结构合理代码可运行拓展挑战

挑战任务:在学生信息管理系统中增加"科目管理"功能——允许用户添加或删除科目,当科目数量变化时,所有学生的成绩元组自动调整。提示:需要先将元组转为列表操作,修改后再转回元组。思考:为什么元组不适合频繁修改的场景?在什么情况下应该使用列表替代?

──────────────────────────────────────────────────[实践课]P11字符串处理程序实践课题字符串方法、切片与文本处理教学对象师范专业本科生(零基础)教学时数2学时(90分钟)实践环境计算机机房,预装Python3.x实践目标•掌握字符串的常用方法:strip()、split()、join()、replace()、find()等•熟练运用字符串切片完成子串提取和反转•理解字符串的格式化输出(f-string、format方法)•能够综合运用字符串操作完成文本处理任务•理解字符串的不可变性,正确使用字符串拼接方式实践内容与步骤

知识回顾与导入(约10分钟)

教师简要回顾字符串的基本概念,强调字符串的不可变性。演示几个字符串方法的实际应用场景(如清洗用户输入、处理CSV数据)。学生创建文件practice_p11.py。

字符串基本方法练习(约20分钟)

练习大小写转换:upper()、lower()、title()、capitalize()、swapcase();练习去空白:strip()、lstrip()、rstrip();练习查找:find()、rfind()、index()、count();练习替换:replace();练习判断:isalpha()、isdigit()、isalnum()、startswith()、endswith()。完成练习:验证一个字符串是否为合法的手机号码格式(11位纯数字)。

字符串分割与拼接(约15分钟)

练习split()按不同分隔符分割字符串(空格、逗号、换行符等);练习splitlines()按行分割;练习join()将列表拼接为字符串(用不同分隔符)。完成练习:给定一句英文,将所有单词逆序输出(如"HelloWorldPython"变为"PythonWorldHello")。

字符串切片与格式化(约15分钟)

练习字符串切片提取子串;利用切片实现字符串反转s[::-1];练习判断回文字符串。学习f-string格式化:f"姓名:{name},年龄:{age}",掌握格式控制符({num:.2f}、{str:>10}等)。完成练习:格式化输出一个简单的成绩单表格。

文本处理综合练习(约20分钟)

给定一段中文文本(多行),完成以下处理:

(1)去除每行首尾多余空格。

(2)统计总字符数、总行数、不含空格的字符数。

(3)找出所有包含"Python"的行。

(4)将文本中所有的逗号替换为中文顿号"、"。

(5)提取文本中的所有英文单词。

教师引导学生逐个功能实现,注意处理边界情况。

任务完成与展示总结(约10分钟)

学生完成实践任务书中的综合任务。教师巡视指导,重点帮助理解字符串方法的链式调用和返回新字符串(不修改原字符串)的特性。展示优秀作品。

实践任务书

任务:简易文本分析器

请编写一个Python程序,实现以下文本分析功能:

1.定义一段包含英文和数字的多行文本(至少5行,模拟一段日志或文章片段)。

2.去除每行首尾空白后,统计文本的总行数、总单词数、总字符数(含空格)和不含空格的字符数。

3.提取所有以大写字母开头的单词。

4.将文本中所有的数字替换为"[NUM]"(如"abc123def"变为"abc[NUM]def")。

5.将每行单词按首字母排序后重新输出。

6.生成一个统计报告,格式如下:

==================================

文本分析报告

==================================

总行数:XX

总单词数:XX

总字符数:XX

===

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论