首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >程序输入4个科目的5个学生分数,并输出学生和科目的最高平均分数。

程序输入4个科目的5个学生分数,并输出学生和科目的最高平均分数。
EN

Stack Overflow用户
提问于 2022-04-26 04:05:14
回答 2查看 1.3K关注 0票数 2

我试图写一个程序,我需要能够输入5个学生的分数,跨越4个不同的科目,然后输出最高的平均分数的学生和科目。

所需的输入和输出是:

代码语言:javascript
运行
复制
Student 1 (courses 1-4): 50 60 70 60 
Student 2 (courses 1-4): 100 90 87 90
Student 3 (courses 1-4): 70 100 90 90
Student 4 (courses 1-4): 30 65 50 50
Student 5 (courses 1-4): 58 50 74 43
The highest average mark of students: 91.75
The highest average mark of courses: 74.2

目前的代码,我有计算为一个科目,而不是4。我如何能够进入4个年级的每个学生,以获得我想要的输出。

请参阅下面的代码:

代码语言:javascript
运行
复制
m1 = int(input("Student 1 (courses 1-4): "))
m2 = int(input("Student 2 (courses 1-4): "))
m3 = int(input("Student 3 (courses 1-4): "))
m4 = int(input("Student 4 (courses 1-4): "))
m5 = int(input("Student 5 (courses 1-4): "))

avg = (m1 + m2+ m3+ m4 + m5) / 5;
avg1 =(m1 + m2+ m3+ m4 + m5) / 20;
print("The Highest average mark of students =", avg)
print("The Highest average mark of courses =", avg1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-26 05:09:21

首先,创建一本字典,为每个学生输入分数。让我们称它为d_marks。创建一本字典,以获得所有学生的平均水平。我们叫它avg_marks吧。创建一本字典,以获得所有课程的总分。我们叫它avg_course吧。在那之后得到他们的max。以下是你如何做到的:

代码语言:javascript
运行
复制
d_marks = {}
avg_marks = {}
avg_course = {}
for i in range(1,6): # We loop for 5 students
    d_marks[f'Student {i} (courses 1-4)'] = list(map(int, input(f"Student {i} (courses 1-4): ").split())) # Split the string and creates an integer list
    avg_marks[f'Average of Student {i}'] = sum(d_marks[f'Student {i} (courses 1-4)']) / len(d_marks[f'Student {i} (courses 1-4)']) #Create average dictionary for Students
    for j in range(1, len(d_marks[f'Student {i} (courses 1-4)'])+1):
        if f'Course {j} sum' in avg_course: # if course sum already in dictionary then add it to previous. 
            avg_course[f'Course {j} sum'] += d_marks[f'Student {i} (courses 1-4)'][j-1]
        else:
            avg_course[f'Course {j} sum'] = d_marks[f'Student {i} (courses 1-4)'][j-1] # if course sum not in dictionary then create one. 

print("The Highest average mark of students =", max(avg_marks.values()))
print("The Highest average mark of courses =", max(avg_course.values())/ len(d_marks))

输出:

代码语言:javascript
运行
复制
Student 1 (courses 1-4): 50 60 70 60
Student 2 (courses 1-4): 100 90 87 90
Student 3 (courses 1-4): 70 100 90 90
Student 4 (courses 1-4): 30 65 50 50
Student 5 (courses 1-4): 58 50 74 43
The Highest average mark of students = 91.75
The Highest average mark of courses = 74.2
票数 1
EN

Stack Overflow用户

发布于 2022-04-26 04:19:59

这段代码起作用,

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

# Part 1
student_num = 5
all_marks = []

for i in range(student_num):
  marks = input(f"Student {i + 1} (courses 1-4): ")
  all_marks.append(list(map(float, marks.split(" "))))

# Part 2
df = pd.DataFrame(all_marks, columns = ['Marks'])
course_avg = df.Marks.apply(np.mean)
student_avg = df.Marks.apply(np.mean, axis = 1)

代码的第一部分将输入转换为数字,并将它们存储到列表中。在第2部分中,这个列表被转换成一个数据框架。我首先在列上应用np.mean来查找每门课程的平均值,然后在行上找到每个学生的平均值。

您可以使用idxmax()course_avgstudent_avg上查找最大平均值的索引,并相应地找到平均水平最高的课程/学生。

(最好直接将值存储在.xlsx或.csv文件中,而不是以这种方式通过.csv输入它们。拥有这些文件后,只需根据文件的格式以 pd.read_csv() pd.read_csv()传递文件路径。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72008244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档