因为一个英语单词的错误修一个下午的bug
核心流程描述:查询学生信息支持用学号查询或则用姓名。用一个标识符区别,分别设置一个空的id和name,当用户选择用学号是,id被赋予对应值,同理,那么也是。再判断哪项不空说明用户选择了那一项。读取全部学生信息到列表,遍历列表,并将符合条件的列表信息存到新的列表。最后用format()格式化函数显示数据。
知识点1:循环中break和return的区别
break:用在for,while,do…while循环中,打破/结束循环,但不会跳出函数
return :是使整个函数返回的,后面的不管是循环里面还是循环外面的都不执行
知识点2:format格式化参数的用法
在本项目中使用format函数显示查询到的学生信息
知识链接
format()函数的用法_format函数用法_小白脸cty的博客-CSDN博客
源码
def show_student(lst): # lst表示未知数,要用这个函数传入一个变量,这个变量在show_student中会用到。 if len(lst) == 0: print('没有查询到学生信息,无数据显示') return # 定义标题的显示格式 format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' # ^表示居中 <和> 同理 print(format_title.format('ID', '姓名', '英语成绩', 'python成绩', 'java成绩', '总成绩')) # 定义内容显示格式 format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' for item in lst: print(format_data.format(item.get('id'), item.get('name'), item.get('english'), item.get('python'), item.get('java'), int(item.get('english')) + int(item.get('python')) + int(item.get('java'))))
def search(): student_query = [] while True: id = '' name = '' if os.path.exists(filename): choice = input('请选择查询方式 1:学号/2:姓名') # 输入的是一个字符串类型,下面数字要加引号 if choice == '1': id = input('请输入要查询的学生学号') elif choice == '2': name = input('请输入要查询的学生姓名') else: print('输入错误') search() with open(filename, 'r', encoding='utf-8') as rfile: student = rfile.readlines() for item in student: d = dict(eval(item)) # 字符串转为字典类型 if id != '': # 原本设置id和name都为空,判断哪个不为空,就用哪个查询 if d['id'] == id: student_query.append(d) # 将查询到的信息导入列表 elif name != '': if d['name'] == name: student_query.append(d) # 将查询到的信息导入列表 # 显示查询结果 show_student(student_query) # 清空列表 student_query.clear() answer = input('是否要继续查询?y/n') if answer == 'y': continue else: break else: print('原文件为空') return