用Python编写完整代码有10名同学的python课程成绩分别为:94, 89, 96, 88, 92, 86, 69, 95, 78, 85,利用列表分析成绩,输出平均值、最高的3个成绩和最低的3个成绩、成绩中位数。
时间: 2024-12-15 08:22:16 浏览: 14
当然可以。首先,我们创建一个列表存储学生的成绩,然后计算平均值、最高分和最低分,以及中位数。下面是完整的Python代码:
```python
# 定义学生成绩列表
scores = [94, 89, 96, 88, 92, 86, 69, 95, 78, 85]
# 计算平均值
average_score = sum(scores) / len(scores)
# 找出最高和最低的三个成绩
sorted_scores = sorted(scores)
top_three_scores = sorted_scores[-3:]
bottom_three_scores = sorted_scores[:3]
# 计算并找到中位数
scores.sort()
middle_index = len(scores) // 2
median_score = scores[middle_index] if len(scores) % 2 == 0 else (scores[middle_index - 1] + scores[middle_index]) / 2
# 输出结果
print("平均值:", average_score)
print("最高的三个成绩:", top_three_scores)
print("最低的三个成绩:", bottom_three_scores)
print("成绩中位数:", median_score)
```
运行这段代码,你会得到相应的统计信息。
相关问题
以下表格收录了4位同学的各科考试成绩,请用python编写程序实现: 1. 将该表格保存成字典; 2. 当用户输入想要查询的人员名字和科目后,程序能够格式化输出这位同学的名字和该科成绩,要求成绩保留小数点后一位数; 3. 如果用户输入的人名不存在时,程序提示“您查询的考生不存在!请重新输入考生姓名:”;如果用户输入的科目(例如XX)不存在时,程序提示“该考生未参加XX课程的考试!请重新输入待查科目:” 科目 人名 数学 英语 物理 化学 Alice 96.56 52.23 85.82 73.31 Beth 72.89 89.36 65.22 92.71 Cecil 80.49 76.61 79.33 66.52 Jake 53.86 88.32 45.77 83.69
以下是用 Python 编写的程序实现:
```python
scores = {
"Alice": {"数学": 96.56, "英语": 52.23, "物理": 85.82, "化学": 73.31},
"Beth": {"数学": 72.89, "英语": 89.36, "物理": 65.22, "化学": 92.71},
"Cecil": {"数学": 80.49, "英语": 76.61, "物理": 79.33, "化学": 66.52},
"Jake": {"数学": 53.86, "英语": 88.32, "物理": 45.77, "化学": 83.69}
}
while True:
name = input("请输入要查询的人员名字:")
if name not in scores.keys():
print("您查询的考生不存在!请重新输入考生姓名:")
continue
subject = input("请输入待查科目:")
if subject not in scores[name].keys():
print("该考生未参加%s课程的考试!请重新输入待查科目:" % subject)
continue
score = scores[name][subject]
print("%s的%s成绩为:%.1f" % (name, subject, score))
break
```
程序首先将表格保存为一个字典,然后进入一个循环,等待用户输入要查询的人员名字和科目。如果输入的人名不存在,则提示重新输入姓名;如果输入的科目不存在,则提示重新输入科目。如果输入的信息正确,则从字典中查找相应的成绩,并格式化输出。如果用户输入的信息有误,则继续等待输入,直到输入正确为止。
根据这个要求,编写一下Python的完整代码
编写一个完整的成绩管理系统涉及到多个模块和功能,以下是一个基本的实现框架。为了简洁起见,我将提供主要的功能模块和关键代码片段。你可以在此基础上进一步完善和优化。
### 项目结构
```
grades_management_system/
├── data/
│ ├── student.dat
│ ├── course.dat
│ └── score.dat
├── main.py
└── utils.py
```
### `main.py`
```python
import os
from utils import *
def main_menu():
print("欢迎使用成绩管理系统")
print("1. 学生信息管理")
print("2. 课程信息管理")
print("3. 成绩信息管理")
print("4. 统计分析")
print("5. 退出系统")
choice = input("请输入您的选择: ")
return choice
def student_info_menu():
print("学生信息管理")
print("1. 录入学生信息")
print("2. 修改学生信息")
print("3. 删除学生信息")
print("4. 查询学生信息")
print("5. 返回主菜单")
choice = input("请输入您的选择: ")
return choice
def course_info_menu():
print("课程信息管理")
print("1. 录入课程信息")
print("2. 修改课程信息")
print("3. 删除课程信息")
print("4. 查询课程信息")
print("5. 返回主菜单")
choice = input("请输入您的选择: ")
return choice
def score_info_menu():
print("成绩信息管理")
print("1. 录入成绩信息")
print("2. 修改成绩信息")
print("3. 删除成绩信息")
print("4. 查询成绩信息")
print("5. 返回主菜单")
choice = input("请输入您的选择: ")
return choice
def statistics_menu():
print("统计分析")
print("1. 学生个人成绩单")
print("2. 课程成绩统计分析")
print("3. 返回主菜单")
choice = input("请输入您的选择: ")
return choice
def main():
while True:
choice = main_menu()
if choice == '1':
handle_student_info()
elif choice == '2':
handle_course_info()
elif choice == '3':
handle_score_info()
elif choice == '4':
handle_statistics()
elif choice == '5':
print("感谢使用成绩管理系统,再见!")
break
else:
print("无效的选择,请重新输入!")
if __name__ == "__main__":
main()
```
### `utils.py`
```python
import csv
import datetime
STUDENT_FILE = "data/student.dat"
COURSE_FILE = "data/course.dat"
SCORE_FILE = "data/score.dat"
def load_data(file_path):
if not os.path.exists(file_path):
with open(file_path, 'w', newline='') as file:
writer = csv.writer(file)
if file_path == STUDENT_FILE:
writer.writerow(["学号", "姓名", "性别", "出生日期", "专业", "学院"])
elif file_path == COURSE_FILE:
writer.writerow(["课程号", "课程名称", "学分"])
elif file_path == SCORE_FILE:
writer.writerow(["学号", "姓名", "课程号", "课程名称", "成绩", "日期"])
with open(file_path, 'r') as file:
reader = csv.DictReader(file)
return list(reader)
def save_data(data, file_path):
with open(file_path, 'w', newline='') as file:
writer = csv.DictWriter(file, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
def get_current_date():
return datetime.datetime.now().strftime("%Y-%m-%d")
def validate_student_id(student_id):
# 验证学号是否符合要求
if len(student_id) != 8 or not student_id[:4].isdigit() or not student_id[4:].isdigit():
return False
return True
def validate_course_id(course_id):
# 验证课程号是否符合要求
if len(course_id) != 8 or not course_id[:4].isalpha() or not course_id[4:].isdigit():
return False
return True
def handle_student_info():
while True:
choice = student_info_menu()
if choice == '1':
add_student()
elif choice == '2':
modify_student()
elif choice == '3':
delete_student()
elif choice == '4':
query_student()
elif choice == '5':
break
else:
print("无效的选择,请重新输入!")
def add_student():
students = load_data(STUDENT_FILE)
student_id = input("请输入学号: ")
if not validate_student_id(student_id):
print("学号格式错误,请重新输入!")
return
name = input("请输入姓名: ")
gender = input("请输入性别 (男/女 或 M/F): ")
birthdate = input("请输入出生日期 (YYYY-MM-DD): ")
major = input("请输入专业: ")
college = input("请输入学院: ")
new_student = {
"学号": student_id,
"姓名": name,
"性别": gender,
"出生日期": birthdate,
"专业": major,
"学院": college
}
students.append(new_student)
save_data(students, STUDENT_FILE)
print("学生信息录入成功!")
def modify_student():
students = load_data(STUDENT_FILE)
student_id = input("请输入要修改的学生学号: ")
for student in students:
if student["学号"] == student_id:
print(f"找到学生 {student['姓名']} ({student_id}) 的信息:")
name = input("请输入新的姓名: ") or student["姓名"]
gender = input("请输入新的性别 (男/女 或 M/F): ") or student["性别"]
birthdate = input("请输入新的出生日期 (YYYY-MM-DD): ") or student["出生日期"]
major = input("请输入新的专业: ") or student["专业"]
college = input("请输入新的学院: ") or student["学院"]
student.update({
"姓名": name,
"性别": gender,
"出生日期": birthdate,
"专业": major,
"学院": college
})
save_data(students, STUDENT_FILE)
print("学生信息修改成功!")
return
print("未找到该学生信息!")
def delete_student():
students = load_data(STUDENT_FILE)
student_id = input("请输入要删除的学生学号: ")
for i, student in enumerate(students):
if student["学号"] == student_id:
del students[i]
save_data(students, STUDENT_FILE)
print("学生信息删除成功!")
return
print("未找到该学生信息!")
def query_student():
students = load_data(STUDENT_FILE)
choice = input("按姓名查询 (1), 按专业查询 (2), 按学院查询 (3): ")
if choice == '1':
name = input("请输入姓名: ")
for student in students:
if student["姓名"] == name:
print(student)
elif choice == '2':
major = input("请输入专业: ")
for student in students:
if student["专业"] == major:
print(student)
elif choice == '3':
college = input("请输入学院: ")
for student in students:
if student["学院"] == college:
print(student)
else:
print("无效的选择,请重新输入!")
def handle_course_info():
while True:
choice = course_info_menu()
if choice == '1':
add_course()
elif choice == '2':
modify_course()
elif choice == '3':
delete_course()
elif choice == '4':
query_course()
elif choice == '5':
break
else:
print("无效的选择,请重新输入!")
def add_course():
courses = load_data(COURSE_FILE)
course_id = input("请输入课程号: ")
if not validate_course_id(course_id):
print("课程号格式错误,请重新输入!")
return
course_name = input("请输入课程名称: ")
credits = int(input("请输入学分: "))
new_course = {
"课程号": course_id,
"课程名称": course_name,
"学分": credits
}
courses.append(new_course)
save_data(courses, COURSE_FILE)
print("课程信息录入成功!")
def modify_course():
courses = load_data(COURSE_FILE)
course_id = input("请输入要修改的课程号: ")
for course in courses:
if course["课程号"] == course_id:
print(f"找到课程 {course['课程名称']} ({course_id}) 的信息:")
course_name = input("请输入新的课程名称: ") or course["课程名称"]
credits = int(input("请输入新的学分: ") or str(course["学分"]))
course.update({
"课程名称": course_name,
"学分": credits
})
save_data(courses, COURSE_FILE)
print("课程信息修改成功!")
return
print("未找到该课程信息!")
def delete_course():
courses = load_data(COURSE_FILE)
course_id = input("请输入要删除的课程号: ")
for i, course in enumerate(courses):
if course["课程号"] == course_id:
del courses[i]
save_data(courses, COURSE_FILE)
print("课程信息删除成功!")
return
print("未找到该课程信息!")
def query_course():
courses = load_data(COURSE_FILE)
course_name = input("请输入课程名称: ")
for course in courses:
if course["课程名称"] == course_name:
print(course)
def handle_score_info():
while True:
choice = score_info_menu()
if choice == '1':
add_score()
elif choice == '2':
modify_score()
elif choice == '3':
delete_score()
elif choice == '4':
query_score()
elif choice == '5':
break
else:
print("无效的选择,请重新输入!")
def add_score():
scores = load_data(SCORE_FILE)
course_name = input("请输入课程名称: ")
courses = load_data(COURSE_FILE)
course_id = None
for course in courses:
if course["课程名称"] == course_name:
course_id = course["课程号"]
break
if not course_id:
print("课程不存在,请重新输入!")
return
while True:
student_id = input("请输入学号: ")
students = load_data(STUDENT_FILE)
student_name = None
for student in students:
if student["学号"] == student_id:
student_name = student["姓名"]
break
if not student_name:
print("学号不存在,请重新输入!")
continue
grade = float(input("请输入成绩: "))
date = get_current_date()
new_score = {
"学号": student_id,
"姓名": student_name,
"课程号": course_id,
"课程名称": course_name,
"成绩": grade,
"日期": date
}
scores.append(new_score)
more = input("继续录入其他学生成绩?(y/n): ")
if more.lower() != 'y':
break
save_data(scores, SCORE_FILE)
print("成绩信息录入成功!")
def modify_score():
scores = load_data(SCORE_FILE)
student_id = input("请输入学号: ")
course_id = input("请输入课程号: ")
for score in scores:
if score["学号"] == student_id and score["课程号"] == course_id:
new_grade = float(input("请输入新的成绩: "))
score["成绩"] = new_grade
score["日期"] = get_current_date()
save_data(scores, SCORE_FILE)
print("成绩信息修改成功!")
return
print("未找到该成绩信息!")
def delete_score():
scores = load_data(SCORE_FILE)
student_id = input("请输入学号: ")
course_id = input("请输入课程号: ")
for i, score in enumerate(scores):
if score["学号"] == student_id and score["课程号"] == course_id:
del scores[i]
save_data(scores, SCORE_FILE)
print("成绩信息删除成功!")
return
print("未找到该成绩信息!")
def query_score():
scores = load_data(SCORE_FILE)
choice = input("按课程号查询 (1), 按学号查询 (2), 按学号+课程号查询 (3): ")
if choice == '1':
course_id = input("请输入课程号: ")
for score in scores:
if score["课程号"] == course_id:
print(score)
elif choice == '2':
student_id = input("请输入学号: ")
for score in scores:
if score["学号"] == student_id:
print(score)
elif choice == '3':
student_id = input("请输入学号: ")
course_id = input("请输入课程号: ")
for score in scores:
if score["学号"] == student_id and score["课程号"] == course_id:
print(score)
else:
print("无效的选择,请重新输入!")
def handle_statistics():
while True:
choice = statistics_menu()
if choice == '1':
generate_student_report()
elif choice == '2':
generate_course_report()
elif choice == '3':
break
else:
print("无效的选择,请重新输入!")
def generate_student_report():
student_id = input("请输入学号或姓名: ")
scores = load_data(SCORE_FILE)
report = [score for score in scores if score["学号"] == student_id or score["姓名"] == student_id]
if not report:
print("未找到该学生的信息!")
return
print("学生成绩单:")
for score in report:
print(score)
grades = [float(score["成绩"]) for score in report]
highest_grade = max(grades)
lowest_grade = min(grades)
average_grade = sum(grades) / len(grades)
print(f"最高成绩: {highest_grade}")
print(f"最低成绩: {lowest_grade}")
print(f"总平均成绩: {average_grade:.2f}")
def generate_course_report():
course_id = input("请输入课程号或课程名称: ")
scores = load_data(SCORE_FILE)
report = [score for score in scores if score["课程号"] == course_id or score["课程名称"] == course_id]
if not report:
print("未找到该课程的信息!")
return
print("课程成绩统计分析:")
for score in report:
print(score)
grades = [float(score["成绩"]) for score in report]
excellent = len([g for g in grades if g >= 90])
good = len([g for g in grades if 80 <= g < 90])
medium = len([g for g in grades if 70 <= g < 80])
pass_ = len([g for g in grades if 60 <= g < 70])
fail = len([g for g in grades if g < 60])
print("-----------------------------")
print("成绩等级 人数")
print("-----------------------------")
print(f"优秀(90以上) {excellent}")
print(f"良好(80-89) {good}")
print(f"中等(70-79) {medium}")
print(f"及格(60-69) {pass_}")
print(f"不及格(60以下) {fail}")
```
### 说明
1. **项目结构**:项目的目录结构包括主程序文件 `main.py` 和工具函数文件 `utils.py`,以及存储数据的 `data` 目录。
2. **主程序**:`main.py` 负责显示主菜单和处理用户的操作选择。
3. **工具函数**:`utils.py` 包含了数据加载、保存、验证等功能,以及各个模块的具体实现。
4. **数据存储**:数据存储在 CSV 文件中,文件名为 `*.dat`,但实际上是 CSV 格式。
你可以根据需要进一步扩展和完善这些代码。希望这对你有所帮助!
阅读全文