本次主要使用新学的列表和字典,结合定义函数等知识点,成功编写了一个简单的学生成绩管理系统。实现了在系统内使用学生的姓名或者学号,即可实现显示、添加、删除、修改、查找(增删改查)、成绩排序(从小到大或从大到小)的功能。
一、实现系统效果
二、代码部分
定义函数:
def menu():
打印出整个菜单
:return:
print("~*" * 60)
print("【三国成绩管理系统】".center(100))
print("欢迎使用学生成绩管理系统!".center(100))
print("请输入需要进行的操作编码:")
print("【0】:退出管理系统".center(100))
print("【1】:显示学生成绩".center(100))
print("【2】:添加学生成绩".center(100))
print("【3】:删除学生成绩".center(100))
print("【4】:修改学生成绩".center(100))
print("【5】:查找学生信息".center(100))
print("【6】:学生成绩排序".center(100))
print("~*" * 60)
# 显示学生成绩
def user_choice():
确保用户选择数字规范,在(0~6)
:return:返回合法的用户选择
number = input("请选择(0~6):")
while int(number) > 6 or int(number) < 0:
number = input("请重新选择(0~6):")
return number
def display_records():
显示学生信息表
:return:
print("所有学生信息:")
for i in student_list:
print("\t\t学号:%s\t\t\t姓名:%s\t\t\t成绩:%s\t\t\t" % (i["学号"], i["姓名"], i["成绩"],))
# 增加学生
def add_student(new_student_list):
增加学生信息
:return:
name = input("请输入学生姓名:")
id_number = input("请输入学生学号:")
grade = input("请输入新增学生成绩:")
# 把这3个数据放入新增字典NewStudent中
new_student = {
"姓名": name, "学号": id_number, "成绩": grade}
# 把它添加到列表student_list中
new_student_list.append(new_student)
print("已成功增加%s号学生%s信息,成绩为:%s" % (new_student["学号"], new_student["姓名"], new_student["成绩"]))
def delete_student(student_list1):
根据学生姓名学号,删除指定学生信息
:param :
:return:
info = input("请输入学生姓名或学号:")
while info == "":
info = input("输入不能为空,请重新输入:")
for s in student_list1:
if s['姓名'] == info or s['学号'] == info:
student_list1.remove(s)
print("已成功删除%s信息,其原成绩为:%s" % (s["姓名"], s["成绩"]))
def modify_student():
根据姓名或学号,修改指定学生信息
:param :
:return:
info = input("请输入学生学号或姓名:")
while info == "":
info = input("输入不能为空,请重新输入学生姓名:")
# 遍历现有学生列表,查询内容
for i in range(0, len(student_list)):
if student_list[i]["学号"] == info or student_list[i]["姓名"] == info:
name = input("请输入学修改后生姓名:")
id_number = input("请输入修改后学生学号:")
grade = input("请输入修改后学生成绩:")
# 把这3个数据放入新增字典change_student中
change_student = {
"学号": id_number,
"姓名": name,
"成绩": grade}
# 用student替换student_list中的第i个字典
student_list[i] = change_student
print("修改成功!")
return
print("修改失败,未查询到该学生。")
def search_student():
查找学生成绩
:return:
name = input("请输入学生姓名或学号:")
while name == "":
name = input("输入不能为空,请重新输入学生姓名:")
for i in student_list:
if i['姓名'] == name or i['学号'] == name:
print("%s号学生%s成绩为:%s" % (i["学号"], i["姓名"], i["成绩"]))
return
else:
print("没有找到该生,请重新输入!")
def sort_student():
按成绩将学生升序、降序排序
:return:
sort = input("请输入排序:(1)从大到小(2)从小到大")
if sort == "1":
student_list.sort(key=lambda item: item['成绩'])
print("已将学生按成绩从小到大排列。")
elif sort == "2":
student_list.sort(key=lambda x: x['成绩'], reverse=True)
print("已将学生按成绩从大到小排列。")
主函数:
choice = None
while choice != "0":
# 打印菜单
menu()
# 获取用户输入
choice = user_choice()
# 用条件分支去判定各种选择
if choice == '1':
# 显示数据
display_records()
elif choice == '2':
# 添加一个学生数据
add_student(student_list)
elif choice == '3':
# 删除数据
delete_student(student_list)
elif choice == '4':
# 修改数据
modify_student()
elif choice == '5':
# 查找信息
search_student()
elif choice == '6':
# 成绩排序
sort_student()
elif choice == '0':
# 退出程序
print('已退出,欢迎下次登录本系统!')
else:
print('请重新输入')
三、遇见问题
1、PyCharm黄色警告“从外部范围隐藏名称”
在设置形参的时候总是爆弱黄色,后来查了下资料,有两种方法可以消除警告:
-
可以
重命名
函数中使用的
爆黄色
参数,也就是说,可以选择不同的名称,例如
answer
,而不是给它相同的名称。
-
另一种方法是在pycharm中设置,抑制此警告不显示。
使用方法一,解决问题。
2、Python的形参和实参使用方式
在定义函数时,突然一下想不清楚Python的形参和实参使用方式,查找资料,重新温习。
形参可以设置参数默认值,设置遵循从右至左原则
例如:
fun(x=0,y=1),fun(x,y=1),但不可以是fun(x=1.y)
形参设置可以为
数字字符串变量
、
元组和字典
等任意类型数据,
元组形参
是在
变量名前加*
,
字典形参
是在
变量名前加**
例如:
fun(var),fun(*tuple),fun(*list),fun(**dict)
实参接受也可以是任意类型数据,当接收数据为元组列表或者字典时,同样是在数据变量前加*和**
例如:
fun(x),fun(*seq),fun(*list),fun(**stu_info)
可以使用
元组形参和字典形参
接收
冗余或意外数据
例如:
fun(var,*t_args, *dic_args)
但传参时,
数字和字符串形参必须传值
,元组和字典形参可不传,因为元组和字典数据可以是空元组或空字典,此特性正好适应处理冗余数据
形参参数名若和生产数据中字典键名相同,将大大提高编程效率和生产效率
例如:
有字典dic={'name:csdn,age:10top1},
有函数fun(name=nameage=0,top=0),
则函数可以方便的获取字典数据 fun(**dic)
3、函数的返回值return
return可以将函数运行的结果反馈给函数,
在外部调用函数的时候,使用一个变量接收即可将函数运行的结果输出;
但如果函数内部没有返回值,也没有打印的动作,在外部调用该函数的时候,你在控制台上看不到任何输出,也无法获取函数运行的结果(无返回值将默认返回None,也就是隐性返回值)。
4、判断输入是不是数字
尝试用 str.isdigit()判断,但未成功。改用简单条件判断方式,但在选择程序(0~6)时,遇见字符串会直接退出程序。需后续改进。
全部函数:
# 结合列表和字典,编写一个简单的学生成绩管理系统。
student_list = [
{"姓名": "曹操",
"成绩": 73,
"学号": "12"},
{"姓名": "司马懿",
"成绩": 88,
"学号": "9"},
{"姓名": "刘备",
"成绩": 88,
"学号": "5"},
{"姓名": "张飞",
"成绩": 47,
"学号": "1"},
{"姓名": "诸葛亮",
"成绩": 92,
"学号": "3"}
def menu():
打印出整个菜单
:return:
print("~*" * 60)
print("【三国成绩管理系统】".center(100))
print("欢迎使用学生成绩管理系统!".center(100))
print("请输入需要进行的操作编码:")
print("【0】:退出管理系统".center(100))
print("【1】:显示学生成绩".center(100))
print("【2】:添加学生成绩".center(100))
print("【3】:删除学生成绩".center(100))
print("【4】:修改学生成绩".center(100))
print("【5】:查找学生信息".center(100))
print("【6】:学生成绩排序".center(100))
print("~*" * 60)
# 显示学生成绩
def user_choice():
确保用户选择数字规范,在(0~6)
:return:返回合法的用户选择
number = input("请选择(0~6):")
while int(number) > 6 or int(number) < 0:
number = input("请重新选择(0~6):")
return number
def display_records():
显示学生信息表
:return:
print("所有学生信息:")
for i in student_list:
print("\t\t学号:%s\t\t\t姓名:%s\t\t\t成绩:%s\t\t\t" % (i["学号"], i["姓名"], i["成绩"],))
# 增加学生
def add_student(new_student_list):
增加学生信息
:return:
name = input("请输入学生姓名:")
id_number = input("请输入学生学号:")
grade = input("请输入新增学生成绩:")
# 把这3个数据放入新增字典NewStudent中
new_student = {
"姓名": name, "学号": id_number, "成绩": grade}
# 把它添加到列表student_list中
new_student_list.append(new_student)
print("已成功增加%s号学生%s信息,成绩为:%s" % (new_student["学号"], new_student["姓名"], new_student["成绩"]))
def delete_student(student_list1):
根据学生姓名学号,删除指定学生信息
:param :
:return:
info = input("请输入学生姓名或学号:")
while info == "":
info = input("输入不能为空,请重新输入:")
for s in student_list1:
if s['姓名'] == info or s['学号'] == info:
student_list1.remove(s)
print("已成功删除%s信息,其原成绩为:%s" % (s["姓名"], s["成绩"]))
def modify_student():
根据姓名或学号,修改指定学生信息
:param :
:return:
info = input("请输入学生学号或姓名:")
while info == "":
info = input("输入不能为空,请重新输入学生姓名:")
# 遍历现有学生列表,查询内容
for i in range(0, len(student_list)):
if student_list[i]["学号"] == info or student_list[i]["姓名"] == info:
name = input("请输入学修改后生姓名:")
id_number = input("请输入修改后学生学号:")
grade = input("请输入修改后学生成绩:")
# 把这3个数据放入新增字典change_student中
change_student = {
"学号": id_number,
"姓名": name,
"成绩": grade}
# 用student替换student_list中的第i个字典
student_list[i] = change_student
print("修改成功!")
return
print("修改失败,未查询到该学生。")
def search_student():
查找学生成绩
:return:
name = input("请输入学生姓名或学号:")
while name == "":
name = input("输入不能为空,请重新输入学生姓名:")
for i in student_list:
if i['姓名'] == name or i['学号'] == name:
print("%s号学生%s成绩为:%s" % (i["学号"], i["姓名"], i["成绩"]))
return
else:
print("没有找到该生,请重新输入!")
def sort_student():
按成绩将学生升序、降序排序
:return:
sort = input("请输入排序:(1)从大到小(2)从小到大")
if sort == "1":
student_list.sort(key=lambda item: item['成绩'])
print("已将学生按成绩从小到大排列。")
elif sort == "2":
student_list.sort(key=lambda x: x['成绩'], reverse=True)
print("已将学生按成绩从大到小排列。")
choice = None
while choice != "0":
# 打印菜单
menu()
# 获取用户输入
choice = user_choice()
# 用条件分支去判定各种选择
if choice == '1':
# 显示数据
display_records()
elif choice == '2':
# 添加一个学生数据
add_student(student_list)
elif choice == '3':
# 删除数据
delete_student(student_list)
elif choice == '4':
# 修改数据
modify_student()
elif choice == '5':
# 查找信息
search_student()
elif choice == '6':
# 成绩排序
sort_student()
elif choice == '0':
# 退出程序
print('已退出,欢迎下次登录本系统!')
else:
print('请重新输入')