随机生成5个学生,3门课程。并计算每个学生的平均成绩和每门课程的最高分

这篇博客介绍了如何使用Python随机生成5个学生及其在3门课程中的成绩,并详细讲解了如何计算每个学生的平均成绩和每门课程的最高分。通过两种不同的实现方式,便于不同基础的读者理解。每种方法的代码实现和运行结果都有所展示,强调了成绩的随机性和每次运行结果的差异性。

python实战经典例题:随机生成5个学生,3门课程。并计算每个学生的平均成绩和每门课程的最高分

首先我们先定义一个列表保存5个学生的姓名为names(随机的看个人喜好)然后定义另一个列表存储课程courses,然后生成随机的数字成绩放进courses里面,最终输出即可

names = ['关羽', '张飞', '赵云', '马超', '黄忠']
courses = ['语文', '数学', '英语']
scores = [[random.randrange(50, 100) for _ in range(3)] for _ in range(5)]
print(scores)
for i, name in enumerate(names):      # 对姓名names进行循环
    for j, course in enumerate(courses):
        print(f'{
     
     name}
Python中,我们可以使用`random`模块字典数据结构来模拟这个场景。首先,我们将创建一个函数,用于随机生成学生成绩。然后,我们会分别计算每个学生的平均分、每课程的统计指标,按平均分排序。 ```python import random # 定义学生课程 students = {} courses = ['数学', '英语', '科学'] # 生成5学生,每课程3个分数 for _ in range(5): student_id = f"学生{len(students)+1}" students[student_id] = {course: [random.randint(60, 100) for _ in range(3)] for course in courses} # 计算每个学生的平均分 averages = {student: sum(scores.values()) / len(scores) for student, scores in students.items()} # 计算课程最高分、最低分标准差 course_stats = {} for course in courses: grades = [score for student_scores in students.values() for score in student_scores.get(course, [])] max_score, min_score = max(grades), min(grades) std_dev = (sum((x - max_score) ** 2 for x in grades) / len(grades)) ** 0.5 course_stats[course] = {'最高分': max_score, '最低分': min_score, '标准差': std_dev} # 按平均分降序排列学生 sorted_students = sorted(averages.items(), key=lambda item: item[1], reverse=True) # 输出结果 print("每个学生的平均分:") for student, avg in sorted_students: print(f"{student}: {avg}") print("\n每课的最高分、最低分标准差:") for course, stats in course_stats.items(): print(f"{course}: 最高分={stats['最高分']}, 最低分={stats['最低分']}, 标准差={stats['标准差']}") print("\n按平均分从高到低的学生信息:") for _, scores in sorted_students: for student, course_scores in students.items(): print(f"{student}: {course_scores}") ```
### 使用 NumPy 实现生成学生成绩统计分析 以下是基于 NumPy 编写的程序,用于生成包含 10 学生、4 课程成绩表,进一步计算每个学生的总分平均分,同时找出每课程最高分最低分。 ```python import numpy as np # 随机种子设置以便结果可重复 np.random.seed(42) # 定义参数 num_students = 10 # 学生数量 num_courses = 4 # 课程数量 score_range = (60, 100) # 成绩范围 # 生成随机成绩矩阵 scores = np.random.randint(score_range[0], score_range[1] + 1, size=(num_students, num_courses)) # 输出生成成绩表 print("生成成绩表:") print(scores) # 计算每个学生的总分 total_scores = scores.sum(axis=1) print("\n每个学生的总分:", total_scores) # 计算每个学生的平均分 avg_scores = scores.mean(axis=1).round(2) print("\n每个学生的平均分:", avg_scores) # 找到每课程最高分最低分 max_scores_per_course = scores.max(axis=0) min_scores_per_course = scores.min(axis=0) print("\n每课程最高分:", max_scores_per_course) print("每课程的最低分:", min_scores_per_course) ``` --- #### 功能解释 - **生成随机成绩矩阵**: - 使用 `np.random.randint` 函数,在指定范围内生成整数型随机数组作为学生成绩[^3]。 - 参数 `(score_range[0], score_range[1] + 1)` 表示分数区间 `[60, 100]`,其中右边界加 1 是因为 `randint` 的上限不包含在内。 - **计算每个学生的总分**: - 调用 `.sum(axis=1)` 方法沿第 1 维度(即按行求计算每个学生的总分[^4]。 - **计算每个学生的平均分**: - 调用 `.mean(axis=1)` 方法沿第 1 维度(即按行求均值)计算每个学生的平均分,使用 `.round(2)` 对结果保留两位小数[^5]。 - **找到每课程最高分最低分**: - 调用 `.max(axis=0)` `.min(axis=0)` 方法分别沿第 0 维度(即按列操作)获取每课程的最大值最小值[^6]。 --- #### 示例输出 假设运行以上代码,可能得到以下结果: ``` 生成成绩表: [[78 95 67 73] [77 98 77 76] [94 87 87 73] ... [77 98 88 74]] 每个学生的总分: [313 328 341 ... 337] 每个学生的平均分: [78.25 82.0 85.25 ... 84.25] 每课程最高分: [94 98 92 96] 每课程的最低分: [67 87 67 73] ``` --- #### 进一步说明 该方法充分利用了 NumPy 提供的强大功能,包括高效的数组运算能力简洁易懂的操作接口。相比传统的循环方式,这种方式不仅更加快捷,而且易于维护扩展[^7]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值