700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python小项目(学生成绩管理系统)7.排序 显示部分

Python小项目(学生成绩管理系统)7.排序 显示部分

时间:2022-08-27 10:45:31

相关推荐

Python小项目(学生成绩管理系统)7.排序 显示部分

Python小项目(学生成绩管理系统)

第七天:排序、显示部分

一.sort()部分

对于排序部分,首先要做的是判断是否存在.txt文件,并用readlines方法,读取.txt文件内的信息。

def sort():if os.path.exists(filename): #判断是否存在.txt文件with open(filename,'r',encoding='UTF-8') as file:student_old= file.readlines()#把文件内容放到student_old里#print('输出student_old')#print(student_old)student_new = []for item in student_old:d = dict(eval(item))#print('输出d')#print(d)student_new.append(d)#print('输出student_new')#print(student_new)else:return

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

这里如果不清楚student_old、d、student_new分别有哪些数据,可以跑一下上面#内的代码。

首先,student.txt文件内有1,2,3,4四个学生的信息。然后我们跑一遍代码,看看输出的内容。

这里我们可以发现,因为readlines是一次性全部读取.txt文件内的信息,所以student_old中,一共有四条学生信息。且这是一个列表。

student_old =

["{'name': '1', 'id': '1', 'chinese': '1', 'math': '1', 'english': '1'}\n",

"{'name': '2', 'id': '2', 'chinese': 2, 'math': 2, 'english': 2}\n",

"{'name': '3', 'id': '3', 'chinese': 3, 'math': 3, 'english': 3}\n",

"{'name': '4', 'id': '4', 'chinese': 4, 'math': 4, 'english': 4}\n"]

接下来,开始遍历student_old,拿出第一个,将他改成字典,给d,然后添加入new中:

第一次遍历

输出d

{'name': '1', 'id': '1', 'chinese': '1', 'math': '1', 'english': '1'}

输出student_new

[{'name': '1', 'id': '1', 'chinese': '1', 'math': '1', 'english': '1'}]

第二次遍历

输出d

{'name': '2', 'id': '2', 'chinese': 2, 'math': 2, 'english': 2}

输出student_new

[{'name': '1', 'id': '1', 'chinese': '1', 'math': '1', 'english': '1'}, {'name': '2', 'id': '2', 'chinese': 2, 'math': 2, 'english': 2}]

第三次遍历

输出d

{'name': '3', 'id': '3', 'chinese': 3, 'math': 3, 'english': 3}

输出student_new

[{'name': '1', 'id': '1', 'chinese': '1', 'math': '1', 'english': '1'}, {'name': '2', 'id': '2', 'chinese': 2, 'math': 2, 'english': 2}, {'name': '3', 'id': '3', 'chinese': 3, 'math': 3, 'english': 3}]

第四次遍历

输出d

{'name': '4', 'id': '4', 'chinese': 4, 'math': 4, 'english': 4}

输出student_new

[{'name': '1', 'id': '1', 'chinese': '1', 'math': '1', 'english': '1'}, {'name': '2', 'id': '2', 'chinese': 2, 'math': 2, 'english': 2}, {'name': '3', 'id': '3', 'chinese': 3, 'math': 3, 'english': 3}, {'name': '4', 'id': '4', 'chinese': 4, 'math': 4, 'english': 4}]

最后,我们对比一下old和new中的内容有何区别:

student_old =

["{'name': '1', 'id': '1', 'chinese': '1', 'math': '1', 'english': '1'}\n",

"{'name': '2', 'id': '2', 'chinese': 2, 'math': 2, 'english': 2}\n",

"{'name': '3', 'id': '3', 'chinese': 3, 'math': 3, 'english': 3}\n",

"{'name': '4', 'id': '4', 'chinese': 4, 'math': 4, 'english': 4}\n"]

student_new=

[{'name': '1', 'id': '1', 'chinese': '1', 'math': '1', 'english': '1'},

{'name': '2', 'id': '2', 'chinese': 2, 'math': 2, 'english': 2},

{'name': '3', 'id': '3', 'chinese': 3, 'math': 3, 'english': 3},

{'name': '4', 'id': '4', 'chinese': 4, 'math': 4, 'english': 4}]

可以看出,原student_old里是字符串格式,不好进行排序操作;经过一连串的转换格式操作,新的student_new里是

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

接下来,选择1.降序或升序? 2.用什么成绩排列?

asc_or_desc = input('请选择(1.升序 | 2.降序):')if asc_or_desc == '1':asc_or_desc_bool = False #asc_or_desc的布尔值。elif asc_or_desc == '2':asc_or_desc_bool = Trueelse:print('输入错误,请重新输入。')time.sleep(2)sort()

注:我们需要了解 list.sort(reverse = Ture) 与list.sort(reverse = False) 的区别

下面来看两段代码:

a = [2,3,77,45,0]a.sort(reverse=False)print(a)#输出:[0, 2, 3, 45, 77]

a = [2,3,77,45,0]a.sort(reverse=True)print(a)#输出:[77, 45, 3, 2, 0]

也就是说 Fales表示升序、True表示倒序。所以我们需要先定义asc_or_desc的布尔值,以便后续的排序操作。

接下来,选择用什么成绩进行排序:

mode = input('请选择排序方式(1.语文成绩 | 2.数学成绩 | 3.英语成绩 | 4.总成绩):') #选按什么成绩排序。if mode == '1':student_new.sort(key = lambda student_new :int(student_new['chinese']),reverse = asc_or_desc_bool)elif mode == '2':student_new.sort(key = lambda student_new :int(student_new['math']),reverse = asc_or_desc_bool)elif mode == '3':student_new.sort(key = lambda student_new :int(student_new['english']),reverse = asc_or_desc_bool)elif mode == '4':student_new.sort(key = lambda student_new :int(student_new['chinese']) + int(student_new['math']) + int(student_new['english']),reverse = asc_or_desc_bool)else:print('输入错误,请重新输入。')time.sleep(2)sort()show_student(student_new)

单独拉出一行:

student_new.sort(key = lambda student_new :int(student_new['chinese']),reverse = asc_or_desc_bool)

key = lambda:我们需要用到参数key,也就是关键词,看下面这句命令,lambda是一个隐函数,是固定写法。

student_new :int(student_new['chinese']):student_new可以写任何东西,你可以直接写 x : int(x['chinese']) 。加int()需要将字符串内容改为整数类型(我们需要数字)。x['chinese']指调用字典中的语文成绩。

reverse = asc_or_desc_bool:上面有介绍reverse的用法。这里就等于False or True。

最后调用show()函数显示student_new。

二.show()部分

def show():student_lst = []if os.path.exists(filename): # 是否存在.txt文件with open(filename, 'r', encoding='UTF-8') as rfile:student = rfile.readlines()for item in student:student_lst.append(eval(item)) #遍历.txt文件 , 将每一行的内容写入student_lst中show_student(student_lst) #一行行写,全写完后,一起展示student_lstprint('所有信息显示完毕,即将返回主菜单。')time.sleep(2)

至此,该系统全部完成,此章完整代码如下:

def sort():if os.path.exists(filename): #判断是否存在.txt文件with open(filename,'r',encoding='UTF-8') as file:student_old= file.readlines()#把文件内容放到student_old里#print('输出student_old')#print(student_old)student_new = []for item in student_old:d = dict(eval(item))#print('输出d')#print(d)student_new.append(d)#print('输出student_new')#print(student_new)else:returnasc_or_desc = input('请选择(1.升序 | 2.降序):')if asc_or_desc == '1':asc_or_desc_bool = False #asc_or_desc的布尔值。elif asc_or_desc == '2':asc_or_desc_bool = Trueelse:print('输入错误,请重新输入。')time.sleep(2)sort()mode = input('请选择排序方式(1.语文成绩 | 2.数学成绩 | 3.英语成绩 | 4.总成绩):') #选按什么成绩排序。if mode == '1':student_new.sort(key = lambda student_new :int(student_new['chinese']),reverse = asc_or_desc_bool)elif mode == '2':student_new.sort(key = lambda student_new :int(student_new['math']),reverse = asc_or_desc_bool)elif mode == '3':student_new.sort(key = lambda student_new :int(student_new['english']),reverse = asc_or_desc_bool)elif mode == '4':student_new.sort(key = lambda student_new :int(student_new['chinese']) + int(student_new['math']) + int(student_new['english']),reverse = asc_or_desc_bool)else:print('输入错误,请重新输入。')time.sleep(2)sort()show_student(student_new) #显示排序好后的结果answer = str(input('是否继续排序操作? T/F: '))if answer == 'F':print('正在退出,请稍后。')time.sleep(2)returnelif answer == 'T':sort()else:print('输入错误。')time.sleep(2)sort()#函数(显示)部分def show():student_lst = []if os.path.exists(filename): # 是否存在.txt文件with open(filename, 'r', encoding='UTF-8') as rfile:student = rfile.readlines()for item in student:student_lst.append(eval(item)) #遍历.txt文件 , 将每一行的内容写入student_lst中show_student(student_lst) #一行行写,全写完后,一起展示student_lstprint('所有信息显示完毕,即将返回主菜单。')time.sleep(2)else:print('未找到相应数据。') # 不存在.txt文件time.sleep(2)menu()

(完)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。