Python程序设计基础 课件 项目四编写基于序列结构的学生信息管理系统_第1页
Python程序设计基础 课件 项目四编写基于序列结构的学生信息管理系统_第2页
Python程序设计基础 课件 项目四编写基于序列结构的学生信息管理系统_第3页
Python程序设计基础 课件 项目四编写基于序列结构的学生信息管理系统_第4页
Python程序设计基础 课件 项目四编写基于序列结构的学生信息管理系统_第5页
已阅读5页,还剩128页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计

项目4编写基于序列结构的学生信息管理系统4.1学习目标学习基础知识:序列的基本概念字符串、列表、元组、字典、集合常见内置函数的用法通过编写输出“编写基于序列结构的学生信息管理系统”具体项目,掌握字符串、列表、元组、字典及集合等相关序列结构的应用。4.2基础知识数据结构是通过某种方式(如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构。

在Python中,最基本的数据结构是序列(sequence),常用的序列结构有字符串、列表、元组、字典和集合。4.2基础知识1.序列序列是一块用来存放多个值的连续内存空间。所有序列类型都可以进行某些特定的操作。这些操作包括索引、分片、加、乘、计算序列长度、找出最大元素和最小元素。4.2基础知识2.序列的索引序列中的所有元素都可以通过索引(下标)来获取;从左往右,第一个元素的索引为0,第二个为1……索引还可以取负值,从右往左,最后一个元素的索引为-1,倒数第二个为-2……4.2基础知识2.序列的索引创建一个字符串:str='Python'字符Python索引(正)012345索引(负)-6-5-4-3-2-1假设需要获取字符串变量str中的第1个字符“P”:str[0] str[-6] 'Python'[0]4.2基础知识分片与索引类似,都可以获取序列中的元素,区别是索引只能获取单个元素,而分片可以获取一定范围内的元素。分片通过冒号隔开的两个索引来实现。3.分片slice[start:end:step]start表示起始索引,省略时表示从序列中的第一个元素开始;end表示结束索引(不包含结束位本身),省略时表示到序列的最后一个元素结束;step表示步长(默认为1,不能为0)4.2基础知识3.分片例如创建序列:strs='abcdefg'分片方式描

述结

果strs[1:]获取strs中从索引1开始到最后一个的所有元素'bcdefg'strs[:3]获取strs中从索引0到索引3之间所有元素'abc'strs[1:3]获取strs中从索引1到索引3之间所有元素'bc'strs[:-1]获取strs中从索引0开始到最后一个元素之间的所有元素'abcdef'strs[-3:-1]获取strs中从索引-3开始到最后一个元素之间的所有元素'ef'strs[-3:]获取strs中最后三个元素'efg'strs[:]获取strs中所有元素'abcdefg'strs[0:7:1]获取序列strs中所有元素'abcdefg'strs[0:7:2]strs[::2]将步长设置为2,获取strs从开始到结束的元素'aceg'strs[7:0:-1]获取strs中从索引7到索引0之间所有元素'gfedcb'4.2基础知识序列相加,就是序列的连接操作。4.序列相加>>>'Hello,'+'World' #字符串序列连接'Hello,World'>>>[1,2,3]+[4,5,6] #列表序列连接[1,2,3,4,5,6]我们要注意的是:只有两种相同类型的序列才能进行连接操作。字符串和列表是无法连接在一起的。4.2基础知识使用数字n乘以一个序列会生成新的序列,在新的序列中,原来的序列将被重复n次。5.序列乘法

编写程序,要求利用序列的乘法运算输出strs="IlovePython!“ #定义字符串并赋值print(""*10+"-"*15) #利用序列的乘法运算输出10个空格和15个“-”print(""*30) #输出30个空格print(""*10+strs) #输出10个空格和字符串print(""*30) #输出30个空格print(""*10+"-"*15) #输出10个空格和15个“-”>>>'hello'*3'hellohellohello'4.2基础知识6.序列的长度、最小值、最大值strs=input("请输入一个字符串:")str_len=len(strs)str_max=max(strs)str_min=min(strs)print("该字符串长度为:",str_len)print("该字符串中最大字符为:",str_max)print("该字符串中最小字符为:",str_min)

程序运行效果4.2.1字符串字符串是以英文单引号、双引号或三引号括起来的任意文本(需要前后一致),如'abc',"xyz"等。如果单引号本身也是字符串中的一个字符,那就可以用双引号括起来,例如"I'mOK!"如果双引号本身也是字符串中的一个字符,那就可以用单引号括起来。例如'Itoldmyfriend,"Pythonismyfavoritelanguage!"‘如果字符串内部既包含单引号又包含双引号,则可以用转义字符“\”来标识,例如'I\'m\"OK\"!'4.2.1字符串字符串索引Python的字符串操作非常灵活,所有元素可以通过索引来获取。索引分为正索引和负索引。正索引从左往右,从0开始,第二个为1,直到最后一个;负索引从右往左,最后一个元素的索引为-1,倒数第二个为-2,直到第一个。两种索引可以同时使用。如创建一个字符串,str=‘IloveChina’,其索引如下表所示。4.2.1字符串字符串切片索引可以获取字符序列的单个元素,切片则可获取一定范围内元素。切片的语法格式:切片选取的区间属于左闭右开型,即从“起始”位开始,到“结束”位的前一位结束(不包含结束位本身)“步长”:即间隔,步长<0表示从右往左倒着取字符。省略“起始”的索引,表示从序列中的第一个元素开始,省略“结束”,表示到序列的最后一个元素结束。4.2.1字符串字符串运算符操作符描述+字符串连接*重复输出字符串[]通过索引获取字符串中字符[:]截取字符串中的一部分,遵循左闭右开原则,str[0:3]是不包含第4个字符的。in成员运算符,如果字符串中包含给定的字符返回Truenotin成员运算符,如果字符串中不包含给定的字符返回Truer/R原始字符串,所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。原始字符串除在字符串的第一个引号前加上字母r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。4.2.1字符串字符串内置函数(部分)操作符描述str.count(string,beg=0,end=len(str))返回string在字符串中出现的次数。如果beg或者end指定则返回指定范围内string出现的次数;如果不指定,则默认范围从字符串的开始到结束str.find(string,beg=0,end=len(str))检测string是否包含在字符串中,如果指定范围beg和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1str.isalpha()如果字符串至少有一个字符并且所有字符都是字母或中文字则返回True,否则返回Falsestr.isupper()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回Falselen(str)返回字符串长度str.split(string="",num=str.count(string))以string为分隔符截取字符串,如果num有指定值,则仅截取num+1个子字符串str.strip([chars])删除字截掉字符串左右边的空格或指定字符chars4.2.1字符串find()函数用于在一个较长的字符串中查找子串。str表示被查找字符串;sub表示查找的子串;start表示开始索引,省略时默认为0;end表示结束索引,省略时默认为字符串的长度。如果找到子串,返回子串所在位置的最左端索引;如果没有找到则返回-1。str.find(sub[,start[,end]])4.2.1字符串例:查找子串“like”是否在字符串new_str中。new_str="IlikelearningPython" #创建字符串a=new_str.find("like") #在new_str中查找子串“like”b=new_str.find("like",5,15) #在new_str的索引为5~15的字符中查找子串print(a) #输出aprint(b) #输出b程序运行效果4.2.1字符串count()函数用于统计字符串里某个子串出现的次数。该函数返回子串在字符串中出现的次数。str表示被查找字符串;sub表示要统计的子串;start表示开始索引,省略时默认为0;end表示结束索引,省略时默认为字符串的长度。str.count(sub[,start[,end]])4.2.1字符串例:创建字符串new_str=“ThisisaPythonbook!”,使用count()方法找出其中“is”

出现的次数。new_str="ThisisaPythonbook!" #创建字符串"ThisisaPythonbook!"a=new_str.count('is’) #统计new_str中“is”出现的次数b=new_str.count('is',1,6) #设置开始和结束索引,统计“is”出现的次数print(a) #输出aprint(b) #输出b程序运行效果4.2.1字符串split()函数以指定字符为分隔符,从字符串左端开始将其分隔成多个字符串,并返回包含分隔结果的列表。str表示被分隔的字符串;delimiter表示分隔符,省略时默认为空字符,包括空格、换行(\n)、制表符(\t)等;num表示分割次数,省略时默认全部分割。str.split([delimiter,num])4.2.1字符串join()函数用于将序列中的元素以指定的字符连接,生成一个新的字符串。str表示连接符,可以为空;sequence表示要连接的元素序列。例如:创建字符串new_str=“Thisisapythonbook!”,使用join()方法将new_str中的字符用“-”连接。>>>new_str="Thisisapythonbook!“ #创建字符串"Thisisapythonbook!">>>'-'.join(new_str) #用“-”连接new_str中的字符'T-h-i-s--i-s--a--p-y-t-h-o-n--b-o-o-k-!' str.join(sequence)4.2.1字符串replace()函数用于将字符串中的旧字符串替换成新字符串。str表示被查找字符串;old表示将被替换的子串;new表示新字符串,用于替换old子串;max是可选参数,表示替换不超过max次,省略时默认替换所有。str.replace(old,new[,max])4.2.1字符串例如:创建字符串“new_str=”MondayTuesdayWednesdayThursdayFridaySaturdaySunday“”,使用replace()方法替换其中的day为DAY。>>>new_str="MondayTuesdayWednesdayThursdayFridaySaturdaySunday">>>new_str.replace('day','DAY') #将new_str中的day替换为DAY'MonDAYTuesDAYWednesDAYThursDAYFriDAYSaturDAYSunDAY'>>>new_str.replace('day','DAY',3) #将new_str中的day替换为DAY,限制为3次'MonDAYTuesDAYWednesDAYThursdayFridaySaturdaySunday'4.2.1字符串strip()函数用于删除字符串两端连续的空白字符或指定字符。str表示字符串;chars表示移除字符串两端指定的字符,省略时默认为空格。str.strip([chars])4.2.1字符串例:创建字符串new_str=“110Thisisanexample0001”,使用strip()方法去掉字符串中的“0”和“1”。>>>new_str="110Thisisanexample0001" #创建字符串>>>new_str.strip('1') #移除new_str两侧的1'0Thisisanexample000' >>>new_str.strip('01') #移除new_str两侧的0和1'Thisisanexample' 4.2.1字符串lower()函数用于转换字符串中所有大写字符为小写;upper()函数则用于转换字符串中所有小写字符为大写。str.lower()str.upper()例如:创建字符串“new_str=”ThisisanEXAMPLE“”,使用lower()方法将其转换为小写,再使用upper()方法将其转换为大写。>>>new_str="ThisisanEXAMPLE“ #创建字符串>>>new_str.lower() #将new_str中的大写字符转为小写'thisisanexample' >>>new_str.upper() #将new_str中的小写字符转为大写'THISISANEXAMPLE' 4.2.1字符串isalnum()函数用于检测字符串是否由字母和数字,或两种的一种组成。str为用于检测的字符串;如果是就返回True;否则返回False。>>>new_str="2018example" #创建字符串>>>new_str.isalnum() #判断new_str中是否只有数字或字母True str.isalnum()例如:创建字符串new_str=“2018example”,使用isalnum()方法判断new_str中是否由字母或数字组成。4.2.2列表概述列表(list)是包含0个或多个元素的有序序列,属于序列类型。列表的长度和内容都是可变的,可自由对列表中的元素进行增加、删除或替换。列表没有长度限制,元素类型可以不同,可以同时包含整数、实数、字符串等基本类型,也可以是列表、元组、字典、集合以及其他自定义类型的对象,使用非常灵活。4.2.2列表列表创建创建列表的方式很简单,只需将逗号分隔的不同元素使用方括号括起来即可。例如:>>>animal=['elephant','monkey','snake','tiger'] >>>animal ['elephant','monkey','snake','tiger']4.2.2列表例:列表的赋值与引用。程序运行结果如下所示[‘001’,’Wangwu’,98][‘001’,’Wangwu’,98][‘002’,’Wangwu’,98][‘002’,’Wangwu’,98]stu_1=['001','Wangwu',98] #是通过赋值方式创建列表stu_1stu_2=stu_1 #stu_2是stu_1所对应数据的引用,stu_2并不包含真实数据print(stu_1,stu_2) #输出stu_1和stu_2stu_1[0]='002' #修改元素stu_1[0]的值为'002'print(stu_1,stu_2) #输出stu_1和stu_24.2.2列表根据结果分析,列表就好比c语言中的数组,所不同的是c语言中的数组的每个元素类型是一致的,而列表中的元素类型可以不同。列表名就相当于数组名,stu2=stu1就相当于stu2和stu1都指向同一个数组,所以修改了stu_1[0]的值,同样stu_2[0]的值也被修改了,所以输出的列表stu2和stu1值是一样的。与字符串支持双向索引一样,列表也支持双向索引,如正索引从0开始,第二个元素索引为1,负索引从右往左,-1表示最后一个元素,-2表示倒数第二个元素,依此类推。通过索引列表可以进行截取、组合等操作。4.2.2列表例:通过索引访问列表中的单个元素。程序运行结果如下所示blueyellowlista=['blue','yellow','white','red','green','black']print(lista[0])print(lista[1])4.2.2列表例:使用负数索引值截取列表中的元素。程序运行结果如下所示lista[1:]:['华山','衡山','嵩山','恒山']lista[1:-2]:['华山','衡山']lista=["泰山","华山","衡山","嵩山","恒山"]print("lista[1:]:",lista[1:])#读取第二位开始的所有元素print("lista[1:-2]:",lista[1:-2])#从第二位开始(包含)截取到倒数第二位(不包含)4.2.2列表列表切片赋值切片赋值是以切片的形式给列表赋值,可以一次为多个元素赋值。例如:list1=['a','b','c','d']list1[2:]=['e','f']print(list1) 程序运行结果如下所示['a','b','e','f']4.2.2列表列表的遍历使用for循环遍历列表。例如:names_list=["滕王阁","黄鹤楼","岳阳楼"]fornameinnames_list:print(name) 程序运行结果如下所示滕王阁黄鹤楼岳阳楼4.2.2列表列表的遍历使用while循环遍历列表。例如:names_list=["滕王阁","黄鹤楼","岳阳楼"]length=len(names_list)i=0whilei<length:print(names_list[i])i+=1 程序运行结果如右所示滕王阁黄鹤楼岳阳楼4.2.2列表列表的遍历使用for循环和enumerate()函数实现列表的遍历。例如:names_list=["滕王阁","黄鹤楼","岳阳楼"]forindex,iteminenumerate(names_list):print(index,item) 程序运行结果如下所示0滕王阁1黄鹤楼2岳阳楼4.2.2列表列表元素的追加append可以向列表添加元素,新的元素添加在列表的末尾。其语法格式:

list.append(object)

其中,list表示列表,object表示要插入到末尾的对象。例如:lista=["水浒传","三国演义","西游记"]lista.append("红楼梦")print("更新后的列表:",lista) 更新后的列表:['水浒传','三国演义','西游记','红楼梦']4.2.2列表列表元素的追加通过extend可以在列表末尾一次性追加另一个列表中的多个值。其语法格式:

list.extend(seq)

其中,list表示列表,seq表示要追加的元素序列。例如:lista=['a','b','c']listb=['d','e','f']lista.extend(listb)print(lista) ['a','b','c','d','e','f']4.2.2列表例:append和extend比较。程序运行结果如下所示['a','b','c',['d','e','f']]['a','b','c','d','e','f']lista=['a','b','c']listb=['d','e','f']lista.append(listb)print(lista)#append将listb作为一个整体添加lista=['a','b','c']lista.extend(listb)print(lista)#extend将listb的元素依次添加可以看出,使用append添加时,是将列表listb作为一个整体添加到列表lista中;使用extend添加时,是将列表listb的每一个元素依次添加添加到列表lista中4.2.2列表列表元素的追加通过insert在指定位置index前插入元素object。其语法格式:

list.insert(index,object)

其中,list:列表,index:对象插入的索引位置,object:要插入的对象。例如:a=[0,1,2]print(a)a.insert(1,3) #将3添加到列表索引为1的位置print(a)[0,1,2][0,3,1,2]4.2.2列表列表的合并和重复列表可以使用加法和乘法例如:lista=['a','b','c']listb=['c','d','e']print(lista+listb)print(lista*2)['a','b','c','c','d','e']['a','b','c','a','b','c']程序运行结果如下所示4.2.2列表列表的复制copy()方法,可以生成一个新的列表。其语法格式:

list.copy()

其中,list表示列表,方法没有参数,返回复制后的新列表。例如:list1=["水浒传","三国演义","西游记","红楼梦"]list2=list1.copy()print("复制后的list2:",list2) 复制后的list2:['水浒传','三国演义','西游记','红楼梦']4.2.2列表列表的清除clear()方法,可以清空列表中所有元素。其语法格式:

list.clear()

其中,list表示列表,方法没有参数,返回一个空列表。例如:list1=["水浒传","三国演义","西游记","红楼梦"]list1.clear()print("清除后的list1:",list1) 清除后的list1:[]4.2.2列表列表元素的查找in(存在),如果存在那么结果为True,否则为False。notin(不存在),如果不存在那么结果为True,否则False。例如:s=[1,2,3,4,5]x=3ifxins:print("有")else:print("没有")) 有列表s中存在3,故输出结果如下所示4.2.2列表列表元素的查找index()方法,返回指定元素在列表中首次出现的位置,如果该元素不在列表中则抛出异常。

其语法格式:

list.index(obj)

其中,list表示列表,obj表示要查找的对象。4.2.2列表例:从键盘输入元素名称,在列表中进行查找并输出。从键盘输入:tiger,程序运行结果如下所示请输入要查找的动物名称:tiger元素tiger在列表中的索引为:3animal=['elephant','monkey','snake','tiger']#创建列表animalx=input('请输入要查找的动物名称:') #输入要查找的元素ifxinanimal: #查找是否存在a=animal.index(x) #返回索引print(f'元素{x}在列表中的索引为:{a}') #输出索引号else:print('列表中不存在该元素') #输出未找到信息4.2.2列表列表元素的统计count()方法,可以统计指定元素在列表中出现的次数。其语法格式:

list.count(obj)

其中,list表示列表,obj表示列表中要统计的对象。例如:x=[1,2,1,2,1,2] #创建列表print(f'1的个数是:{x.count(1)}。') 1的个数是:3。4.2.2列表列表元素的修改元素的修改是通过下标来实现的。例如:lista=['ZhangShan','LiSi',2023,2024]print("第三个元素为:",lista[2])lista[2]=2024print("更新后的第三个元素为:",lista[2]) 第三个元素为:2023更新后的第三个元素为:2024程序运行结果如下所示4.2.2列表列表元素的删除del:根据索引号进行删除。其语法格式:

dellist[index]

其中,list表示列表,index表示删除元素的索引位置。例如:list=['Taobao','Runoob',1997,2000]print("原始列表:",list)dellist[2]print("删除第三个元素:",list) 原始列表:['Taobao','Runoob',1997,2000]删除第三个元素:['Taobao','Runoob',2000]4.2.2列表列表元素的删除pop():删除最后一个元素。其语法格式:

list.pop([index=-1])

其中,list表示列表,index为可选参数,默认值为-1(最后一个元素)。例如:lista=['a','b','c','d','e','f']lista.pop()print(lista)lista.pop(2)print(lista) ['a','b','c','d','e']['a','b','d','e']程序运行结果如下所示4.2.2列表列表元素的删除remove():根据元素的值进行移除第一个匹配项。其语法格式:

list.remove(object)

其中,list表示列表,object表示要移除的的对象。例如:lista=['a','b','c','d','a','b']lista.remove('a')print(lista) ['b','c','d','a','b']程序运行结果如下所示4.2.2列表列表元素的排序reverse():用于将列表逆序排列。其语法格式:

list.reverse()

其中,list表示列表,方法没有参数,也没有返回值。例如:lista=[1,4,2,3,5]lista.reverse()print(lista) [5,3,2,4,1]程序运行结果如下所示4.2.2列表列表元素的排序sort():列表的元素按照特定顺序排列。其语法格式:

list.sort(key=None,reverse=False)

其中,list表示列表,key表示可选参数,指定后,会使用该参数的方法进行排序;reverse也是可选参数,表示排序规则,默认为reverse=False,即按升序排序,如果要按降序排序,可设置reverse=True。4.2.2列表例:对列表lista进行排序并输出。程序运行结果如下所示[1,2,3,4,5][5,4,3,2,1]lista=[1,4,2,3,5]lista.sort()print(lista)lista.sort(reverse=True)print(lista)4.2.2列表列表元素的排序sorted():内置函数按照特定顺序排列。其语法格式:

sorted(iterable[,key=None][,reverse=False])

其中,iterable表示列表名,参数key和reverse的用法同sort()。例如:listb=[1,4,2,3,5]lista=sorted(listb)print(listb)print(lista)[1,4,2,3,5][1,2,3,4,5]程序运行结果如下所示4.2.2列表列表的嵌套列表的嵌套指的是一个列表的元素又是一个列表。列表的嵌套也被称为多维列表,多维列表的元素值还是一个列表。遍历嵌套列表,可以通过双重循环来完成。4.2.2列表例:遍历嵌套列表。程序运行结果如下所示清华大学南京大学北京大学天津大学江西师范大学南昌大学中国药科大学school_names=[['清华大学','南京大学'],\['北京大学','天津大学','江西师范大学'],\['南昌大学','中国药科大学']]foriinrange(len(school_names)):list=school_names[i]forjinrange(len(list)):print(list[j])4.2.3元组元组(tuple):与列表类似,不同之处在于不能修改元组的元素,元组使用圆括号包含元素,而列表使用方括号包含元素。创建元组:只需要在圆括号中添加元素,并使用逗号分隔元素即可,也可省略圆括号,直接使用逗号分隔元素。>>>x=("造纸术","指南针","火药","印刷术") #创建元组x>>>x #输出x('造纸术','指南针','火药','印刷术')如果要定义一个空元组,可以用没有包含内容的圆括号来表示。4.2.3元组在创建元组时也可以省略圆括号;>>>y='a','b','c','d' #创建元组y时省略了圆括号>>>y #输出y('a','b','c','d')若要创建空元组x,直接用x=()表示值得注意的是如果要创建只有一个元素的元组则元素后面要加逗号,如x=(1,)4.2.3元组Python提供的元组内置函数有len()、max()、min()和tuple()。tuple()函数的功能是以一个序列为参数,并把它转换为元组,如果参数本身是元组,则原样返回该参数。>>>tuple([1,2,3]) #将列表转换为元组(1,2,3)>>>tuple('abc') #将字符串转换为元组('a','b','c')>>>tuple((1,2,3)) #参数为元组(1,2,3)例如:4.2.3元组访问元组可以使用下标索引来访问元组中的值。例如:tuplea=('hello',100,4.5)print(tuplea[0])print(tuplea[1])print(tuplea[2])print(tuplea[-1])#负索引访问hello1004.54.5程序运行结果如下所示4.2.3元组元组的合并元组中的元素值是不允许修改的,但可以对元组进行连接组合。例如:tuplea=('长江','长城')tupleb=('黄山','黄河')print(tuplea+tupleb)('长江','长城','黄山','黄河')程序运行结果如下所示4.2.3元组例:元组的合并。拼接合并后的tup1不是原来的元组,而是新创建的元组。程序运行结果如下所示tup3:('长江','长城','黄山','黄河')拼接前:tup1:('长江','长城')id(tup1):1451754208640拼接后:tup1:('长江','长城','黄山','黄河')id(tup1):1451748742848tup1=('长江','长城')tup2=('黄山','黄河')tup3=tup1+tup2 #拼接到tup3print(f'tup3:{tup3}')print('拼接前:')print(f'tup1:{tup1}')print(f'id(tup1):{id(tup1)}')tup1+=tup2 #拼接到tup1print('拼接后:')print(f'tup1:{tup1}')print(f'id(tup1):{id(tup1)}')#以下修改元组元素操作是非法的。#tup1[0]=1004.2.3元组元组的遍历元组的遍历可以通过for循环实现对元组所有元素的访问。例如:tuplea=('长江','长城','黄山','黄河')fornumintuplea:print(num,end="")长江长城黄山黄河程序运行结果如下所示4.2.3元组Python提供的元组内置函数有len()、max()、min()和tuple()。tuple()函数的功能是以一个序列为参数,并把它转换为元组,如果参数本身是元组,则原样返回该参数。>>>tuple([1,2,3]) #将列表转换为元组(1,2,3)>>>tuple('abc') #将字符串转换为元组('a','b','c')>>>tuple((1,2,3)) #参数为元组(1,2,3)例如:4.2.4字典字典是Python中常用的一种数据存储结构,它是由“键-值”对组成,每个“键-值”对称为一个元素,每个元素表示一种映射或对应关系。“键”可以是Python中任意不可变数据,如整数、实数、复数、字符串、元组等类型,但不能使用列表、集合、字典或其他可变类型作为字典的“键”。“值”可以取任意数据类型。4.2.4字典字典的创建通过直接赋值方式创建字典。其语法格式:

dict={key1:value1,key2:value2,……}例如:创建一个学生信息字典,包括姓名、性别、地址和年龄。>>>stu={"name":"张山","sex":"f","address":"江西","age":18}>>>stu{'name':'张山','sex':'f','address':'江西','age':18}4.2.4字典字典的创建通过直接赋值方式创建字典。其语法格式:

dict={key1:value1,key2:value2,……}例如:创建一个学生信息字典,包括姓名、性别、地址和年龄。>>>stu={"name":"张山","sex":"f","address":"江西","age":18}>>>stu{'name':'张山','sex':'f','address':'江西','age':18}4.2.4字典字典的创建通过内置函数dict()方式创建字典。其语法格式:

例如:>>>stu={"name":"张山","sex":"f","address":"江西","age":18}>>>stu2=dict(stu)>>>stu3=dict((["name","张山"],["sex","f"],["address","江西"],["age",18]))4.2.4字典字典的创建当所有键对应值相同时,可用fromkeys()方法创建字典。其语法格式:

dict.fromkeys(seq[,value])

其中,dict表示字典,seq为字典的键值列表,value表示字典的键对应的值,为可选参数,默认值为None。>>>stu=dict.fromkeys(["张山","李四"])>>>stu{'张山':None,'李四':None}>>>stu2=dict.fromkeys(["张山","李四"],"f")>>>stu2{'张山':'f','李四':'f'}4.2.4字典字典的创建使用dict(zip())方法将两个列表合并成一个字典。

例如:>>>keys=['名山','大川','湖泊']>>>values=['井冈山','长江','鄱阳湖']>>>dict1=dict(zip(keys,values))>>>dict1{'名山':'井冈山','大川':'长江','湖泊':'鄱阳湖'}4.2.4字典字典的访问访问字典的值,可以采用直接的访问方法。其语法格式:

<dict>[<key>]

例如:>>>stu={"name":"张山","sex":"f","address":"江西","age":18}>>>print(stu['name'])张山>>>print(stu['age'])184.2.4字典字典的访问不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值。其语法格式:

dict.get(key,default=None)

例如:>>>stu={"name":"张山","sex":"f","address":"江西"}>>>age=stu.get('age')>>>print(age)#'age'键不存在,所以age为NoneNone>>>age=stu.get('age',18)#若info不存在'age',返回默认值18>>>print(age)184.2.4字典字典元素的修改和添加修改字典元素,可以根据字典中的键名找到相应的值修改即可。

其语法格式:

<dict>[<key>]=value

注意,添加字典元素也采用上述相同的语法格式。执行该操作时,如果字典中查找到有相应的键,那么执行修改,如果没有,则执行添加功能,在字典中新加入键值对。4.2.4字典例:字典元素的修改和添加。程序运行结果如下所示操作后的字典:{'name':'张山','sex':'f','address':'北京','age':18,'id':'20241234'}stu={"name":"张山","sex":"f","address":"江西","age":18}stu['address']='北京' #更新元素stu['id']='20241234' #添加元素print('操作后的字典:',stu)4.2.4字典字典元素的删除del命令,用于按key删除字典元素或整个字典变量。当指定要删除元素的key时,删除对应元素的键和值,当只指定字典名时,将删除整个字典变量。

例如:>>>stu={"name":"张山","sex":"f","address":"江西","age":18}>>>delstu["age"]>>>print('操作后的字典:',stu)操作后的字典:{'name':'张山','sex':'f','address':'江西'}4.2.4字典字典元素的删除pop()方法用于获取指定key的值,并将这个键值对从字典中移除。其语法格式为:dict.pop(key[,default])

例如:>>>stu={"name":"张山","sex":"f","address":"江西","age":18}>>>stu.pop("age")>>>print('操作后的字典:',stu)操作后的字典:{'name':'张山','sex':'f','address':'江西'}4.2.4字典字典元素的删除del命令,用于按key删除字典元素或整个字典变量。当指定要删除元素的key时,删除对应元素的键和值,当只指定字典名时,将删除整个字典变量。

例如:>>>stu={"name":"张山","sex":"f","address":"江西","age":18}>>>delstu["age"]>>>print('操作后的字典:',stu)操作后的字典:{'name':'张山','sex':'f','address':'江西'}4.2.4字典字典元素的更新update()方法:可以将新字典的“键-值”对一次性全部添加到当前字典中,如果两个字典中存在相同的“键”,则以新字典中的“值”为准更新当前字典。其语法格式为:dict.update(dict2)>>>stu={"name":"张山","sex":"f","address":"江西","age":18}>>>stu.update({'age':'19','sex':'m'})>>>print('操作后的字典:',stu)操作后的字典:{'name':'张山','sex':'m','address':'江西','age':'19'}4.2.4字典字典的复制直接赋值,是将两个字典指向同一内存地址,实际上可以理解为对象的引用,两个字典的数据相同,在内存中指向的地址也相同。

浅复制(copy()方法):拷贝父对象,引用对象内部的子对象。深复制(deepcopy()方法):copy模块的deepcopy()方法,完全复制父对象及其子对象。4.2.4字典例:字典的三种复制方法。stu1={"name":"张山",'score':[85,82,90]}stu2=stu1 #直接赋值,引用对象stu3=stu1.copy() #浅复制,深复制父对象,子对象不复制,还是引用importcopystu4=copy.deepcopy(stu1) #深复制,完全复制父对象及其子对象stu1['name']='李四' #将stu1中键为'name'的值改为'李四'stu1['score'].remove(82) #移除stu1中键为'score'的列表值中的82print('stu1=',stu1)print('stu2=',stu2)print('stu3=',stu3)print('stu4=',stu4)4.2.4字典字典的遍历遍历字典也可以使用for循环和while循环。可使用dict.items()方法遍历字典中的所有键值对。

例如:dicta={'Name':'lss','Age':18}foritemindicta.items():print(item)每个元素返回的是键和值组成的元组,程序运行结果如下所示('Name','lss')('Age',18)4.2.4字典字典的遍历可使用dict.keys()方法遍历字典中的所有键。

例如:dicta={'Name':'Zara','Age':19}forkeyindicta.keys():print(key)程序运行结果如下所示NameAge4.2.4字典字典的遍历可使用dict.values()方法遍历字典中的所有值。

例如:dicta={'Name':'Zara','Age':19}forvalueindicta.values():print(value)程序运行结果如下所示Zara194.2.4字典字典的遍历还可使用dict.items()方法遍历字典中的所有键和值。

例如:dicta={'Name':'Zara','Age':19}forkey,valueindict.items():print("key=%s,value=%s"%(key,value))程序运行结果如下所示key=Name,value=Zarakey=Age,value=194.2.4字典字典的嵌套包括在列表中嵌套字典、在字典中嵌套列表、在字典中嵌套字典等。

例如:stu_info1={'name':'Wangmi','sex':'F','age':'15'}stu_info2={'name':'Linmei','sex':'M','age':'14'}stu_info3={'name':'Chenhui','sex':'F','age':'14'}student=[stu_info1,stu_info2,stu_info3]forsinstudent: print(s)4.2.4字典字典的嵌套包括在列表中嵌套字典、在字典中嵌套列表、在字典中嵌套字典等。

例如:输出在列表中嵌套的字典。stu_info1={'name':'Wangmi','sex':'F','age':'15'}stu_info2={'name':'Linmei','sex':'M','age':'14'}stu_info3={'name':'Chenhui','sex':'F','age':'14'}student=[stu_info1,stu_info2,stu_info3]forsinstudent: print(s)4.2.4字典字典的嵌套

例如:输出在字典中嵌套的列表。stu_class={'Mary':['C','Math'],'Jone':['Java','Art'],'Lily':['Python'],'Tony':['Python','Mysql','Math']} forname,clainstu_class.items(): print(name,'选的课程是:',end='') forcincla: print(c,end=',') print()4.2.4字典字典的嵌套

例如:输出在字典中嵌套的字典。stu_info={'WangMi':{'sex':'F','age':'15'},'LinMei':{'sex':'M','age':'14'},'ChenHui':{'sex':'F','age':'14'}}forname,stuinstu_info.items():print(name,',性别:',stu['sex'],',年龄:',stu['age']) 4.2.5集合集合(set)与数学中集合的概念一致,即包含0个或多个数据项的无序组合。一对大括号作为定界符,元素之间逗号分隔集合中的元素不可重复元素类型只能是固定数据类型,如整数、浮点数、字符串、元组等不能是列表、字典和集合等可变数据类型集合的创建直接将集合赋值给变量即可创建一个集合对象。例如:使用函数set()函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则在转换为集合的时候只保留一个。4.2.5集合>>>set1={3,5} #创建集合set1 >>>set1 #输出set1{3,5}4.2.5集合例:使用set实现集合的创建及赋值。set2=set()#创建空集合set3=set([0,1,2,0,1,2,3,4])#创建集合并赋值print("set2:",set2)print("set3:",set3)程序运行结果如下所示set2:set()set3:{0,1,2,3,4}集合的访问访问集合中的元素,包括检查元素是不是集合中的成员,或遍历集合显示成员。例如:4.2.5集合set1=set([1,2,3,4])print('a'inset1)print(2inset1)foriinset1:print(i,end="\t")程序运行结果如下所示FalseTrue1 2 3 44.2.5集合集合的操作集合的更新包括添加、修改、合并和移除集合的元素。4.2.5集合例:集合的操作。set1=set([1,2,3,4])set1.add(5)print(set1)set1.update({4,5,6})print(set1)set1.pop()print(set1)set1.remove(4)print(set1)set1.clear()print(set1)程序运行结果如下所示{1,2,3,4,5}{1,2,3,4,5,6}{2,3,4,5,6}{2,3,5,6}set()4.2.5集合集合的运算可以使用in、notin和==、!=等运算符进行集合的运算。4.2.5集合例:集合的运算。set1=set([1,2,3,4])set2=set([4,5,6])print(set1&set2)print(set1|set2)print(set1-set2)print(set1^set2)set3=set([1,2])print(set3<=set1)程序运行结果如下所示{4}{1,2,3,4,5,6}{1,2,3}{1,2,3,5,6}True4.2.6序列结构的比较和综合应用字符串(string):长度不可变的数据序列,可通过下标索引获取相应的字符。列表(list):长度可变有序的数据序列,可通过下标索引获取到相应的数据。元组(tuple):固定长度不可变的数据序列,访问效率高,适合存储一些常量数据,可以作为字典的键使用。字典(dict):长度可变的hash序列。存储的方式为键值对,可以通过相应的键获取相应的值,key支持多种类型。key必须是不可变类型且唯一。集合(set):无序,元素只出现一次,可以自动去重。4.2.6序列结构的比较和综合应用4.2.6序列结构的比较和综合应用例:英文字符频率统计。编写一个程序,对给定的英文句子中出现的a-z字母频率进行分析,忽略大小写,采用降序方式输出。str_sen=input('请输入一段英文句子:')#存放字符串到列表lista=[]forsinstr_sen:ifs.islower()ors.isupper():lista.append(s.lower())#统一成小写字母加入列表#统计各字母及及个数到字典dicta={}forainlista:dicta[a]=dicta.get(a,0)+1#将字典按字母频率排序到列表listb=sorted(dicta.items(),key=lambdax:x[1],reverse=True)#输出字母及频率forbinlistb:print(f'{b[0]:<2}:{b[1]:>2}')4.3典型工作项目本阶段利用Python的IDLE开发环境,综合运用序列结构相关知识点编写“学生基本信息管理系统”程序,实现基于序列结构的学生基本信息的有效组织、存储及管理。通过测试后,提交该程序。

4.3.1需求分析首先来重点分析下系统应具备哪些功能?实地考察法访谈法问卷调查法去了解用户对系统有哪些需求,通过功能需求分析得知本系统应实现以下三大功能:4.3.1需求分析用户可以查询系统的所有信息,如果系统中没有录入原始数据,系统会提示“信息为空!”1.信息查询功能用户输入1--4范围内的任意一个数字可以分别进入添加学生信息模块、查询学生信息模块、修改学生信息模块、删除学生信息模块这四个模块对学生的基本信息进行增加、查询、修改及删除操作。2.信息管理功能4.3.1需求分析2.信息管理功能(1)添加学生信息模块:录入学生的完整信息,录入操作执行完之后系统会提示添加成功!然后弹出信息管理的主界面供用户选择下一个操作。(2)查询学生信息模块:按姓名进行查询学生的基本信息并显示该同学的基本信息,若输入的姓名不存在,系统会提示没有找该学生,请重新输入。(3)修改学生信息模块:按姓名修改学生的基本信息,若遇到重名则按学号进行修改基本信息。4.3.1需求分析2.信息管理功能(4)删除学生信息模块:按姓名删除学生的基本信息,若遇到重名则按学号进行删除基本信息。(5)退出当前页面:当用户在信息管理主界面中输入0的时,系统会退出当前页面并跳转到系统主界面中。3.退出程序当用户对学生的基本信息进行管理完之后,可以通过输入0退出程序。4.3.2程序设计1.总体设计设计一个主界面,用户输入1进入信息插叙模块,输入2进入信息管理模块,输入0退出程序。其中信息管理模块包含录入、删除、修改、查询这四个功能。4.3.2程序设计1.总体设计4.3.2程序设计界面友好、操作简单,有直观的布局。为有效实现对功能模块间

温馨提示

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

最新文档

评论

0/150

提交评论