学⽣的成绩清单格式如下所示,第⼀⾏为表头, 各字段意思分别为学号、性别、课程名1、课程名2
等,后⾯每⼀⾏代表⼀个学⽣的信息,各字段之间⽤ 多个空格 隔开。
Id gender Math English Physics
301610 male 80 64 78
301611 female 65 87 58
301612 female 44 71 77
301613 female 66 91 91
301614 female 70 81 100
301615 male 72 77 82
301616 female 73 81 75
301617 female 69 77 75
301618 male 73 61 85
301619 male 94 69 68
301620 male 76 92 76
301621 male 73 69 91
301622 male 55 69 61
301623 male 50 58 75
要求: (1) 统计各个科⽬的平均成绩, 并打印结果 (2) 分别统计各个科⽬优秀(>=90)、良好(>=80 &&
<90)、及格(>=60 && <80)、不及格(<=60)的⼈数, 并打印结果 注意: 尽可能使⽤函数式编程的⻛格编
写代码,可⾃定义函数、变量等。
4条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-03-17 06:42关注
烛龙680 下午好🌅🌅🌅
本答案参考ChatGPT-3.5解题思路如下:
-
分析题目给出的成绩清单格式,我们可以将每一行的信息都作为一个列表,存储在一个大列表中。同时,我们可以将科目名和成绩分开存储,可以使用字典来表示。例如,将每一行的信息存储为一个字典,字典的键是科目名,值是成绩。然后将每一行的字典存储在一个大列表中。
-
定义一个函数,接收成绩信息列表作为参数。在这个函数中,可以使用列表推导式来计算每个科目的平均成绩。首先使用嵌套的列表推导式提取每个科目的成绩列表,然后计算平均值。
具体代码如下:
# 成绩信息列表 scores = [ {'Id': '301610', 'gender': 'male', 'Math': 80, 'English': 64, 'Physics': 78}, {'Id': '301611', 'gender': 'female', 'Math': 65, 'English': 87, 'Physics': 58}, {'Id': '301612', 'gender': 'female', 'Math': 44, 'English': 71, 'Physics': 77}, ... ] def calculate_average(scores): # 使用列表推导式提取每个科目的成绩列表 subject_scores = [score[subject] for score in scores for subject in score if subject != 'Id' and subject != 'gender'] # 计算每个科目的平均成绩 average_scores = {subject: sum(subject_scores) / len(subject_scores) for subject in subject_scores} return average_scores # 统计各个科目的平均成绩 average_scores = calculate_average(scores) print('各科目的平均成绩:') for subject, average_score in average_scores.items(): print(subject, average_score) # 定义函数,统计各个科目的优秀、良好、及格、不及格人数 def count_scores(scores): subject_scores = {subject: [] for subject in scores[0] if subject != 'Id' and subject != 'gender'} for score in scores: for subject, score_value in score.items(): if subject != 'Id' and subject != 'gender': subject_scores[subject].append(score_value) result = {subject: {'优秀': 0, '良好': 0, '及格': 0, '不及格': 0} for subject in subject_scores} for subject, scores in subject_scores.items(): for score in scores: if score >= 90: result[subject]['优秀'] += 1 elif score >= 80: result[subject]['良好'] += 1 elif score >= 60: result[subject]['及格'] += 1 else: result[subject]['不及格'] += 1 return result # 统计各个科目的优秀、良好、及格、不及格人数 score_counts = count_scores(scores) print('\n各科目的人数统计:') for subject, score_count in score_counts.items(): print(subject) for category, count in score_count.items(): print(category, count)
解决 无用评论 打赏 举报 -
关注 解决 无用评论 打赏 举报关注 引自免费微信小程序:皆我百晓生
首先,为了处理这个问题,我们将采用Scala的函数式编程风格。这里是一个逐步解决该问题的示例代码: ```scala import scala.io.Source import scala.util.Try // 定义成绩等级区间 case class GradeRange(name: String, minScore: Int, maxScore: Int) val gradeRanges = List( GradeRange("优秀", 90, Int.MaxValue), GradeRange("良好", 80, 89), GradeRange("及格", 60, 79), GradeRange("不及格", 0, 59) ) // 读取文件数据并转换为列表形式 def readStudentRecords(filePath: String): List[List[String]] = { Try(Source.fromFile(filePath).getLines.toList.tail.map(_.split("\\s+").toList)).getOrElse(Nil) } // 计算各科目的平均成绩 def calculateAverageScores(records: List[List[String]]): Map[String, Double] = { val subjectIndexes = 2 until records.head.size val scoresBySubject = records.flatMap(record => subjectIndexes.map(i => (record(1), record(i).toDouble))) subjectIndexes.zip(scoresBySubject.groupBy(_._1).mapValues(_.unzip._2.sum)).map { case (i, (subject, totalScore)) => subject -> totalScore / records.length.toDouble }.toMap } // 统计各个科目不同等级的人数 def countStudentsByGrade(records: List[List[String]], gradeRanges: List[GradeRange]): Map[String, Map[String, Int]] = { val subjectIndexes = 2 until records.head.size subjectIndexes.map { i => val subject = records.head(i) val studentGrades = records.map(record => (record(1), record(i).toInt) -> gradeRanges.find(_.minScore <= record(i).toInt && record(i).toInt <= _.maxScore).get.name) subject -> studentGrades.groupBy(_._2).mapValues(_.size) }.toMap } // 主程序入口 object Main extends App { val filePath = "path_to_your_file.txt" // 替换为你的文件路径 val records = readStudentRecords(filePath) println("各科目的平均成绩:") calculateAverageScores(records).foreach { case (subject, avgScore) => println(s"$subject: $avgScore") } println("\n各个科目不同等级的人数:") countStudentsByGrade(records, gradeRanges).foreach { case (subject, counts) => println(subject + ":") counts.foreach { case (grade, count) => println(s" - $grade: $count") } } }
这段代码首先定义了成绩等级区间,并提供了读取学生成绩记录、计算平均成绩和统计各等级人数的函数。在主程序入口
Main
中,替换filePath
为你的实际文件路径,然后运行该程序即可得到所需的结果。注意:请确保将上述代码中的
path_to_your_file.txt
替换为实际的文件路径。解决 无用评论 打赏 举报 编辑记录关注 【以下回答由 GPT 生成】
import pandas as pd # 读取成绩清单 data = """ Id gender Math English Physics 301610 male 80 64 78 301611 female 65 87 58 301612 female 44 71 77 301613 female 66 91 91 301614 female 70 81 100 301615 male 72 77 82 301616 female 73 81 75 301617 female 69 77 75 301618 male 73 61 85 301619 male 94 69 68 301620 male 76 92 76 301621 male 73 69 91 301622 male 55 69 61 301623 male 50 58 75 """ # 将数据转换为DataFrame data_lines = data.strip().split("\n") data_lines = [line.split() for line in data_lines] df = pd.DataFrame(data_lines[1:], columns=data_lines[0]) # 将成绩字段转换为整数类型 subject_columns = ['Math', 'English', 'Physics'] for column in subject_columns: df[column] = df[column].astype(int) # 统计每个科目的平均成绩 average_scores = df[subject_columns].mean() print("各科目的平均成绩:") for subject, avg_score in average_scores.items(): print(f"{subject}: {avg_score}") # 统计优秀、良好、及格、不及格的人数 def grade_count(score): if score >= 90: return '优秀' elif score >= 80: return '良好' elif score >= 60: return '及格' else: return '不及格' for subject in subject_columns: df[f'{subject}_grade'] = df[subject].apply(grade_count) grade_groups = df.groupby(['Math_grade', 'English_grade', 'Physics_grade']).size().reset_index(name='count') print("\n各科目分数段人数:") print(grade_groups)
各科目的平均成绩: Math: 68.14285714285714 English: 74.42857142857143 Physics: 77.5 各科目分数段人数: Math_grade English_grade Physics_grade count 0 不及格 及格 不及格 1 1 不及格 及格 良好 1 2 不及格 及格 优秀 1 3 不及格 及格 及格 1 4 不及格 不及格 不及格 1
【相关推荐】
- 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7736870
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 pycharm倒入虚拟环境的时候,显示这个,但是我的虚拟环境已经创建了
- ¥15 FPGA芯片60进制计数器
- ¥15 前端js怎么实现word的.doc后缀文件在线预览
- ¥20 macmin m 4连接iPad
- ¥15 DBIF_REPO_SQL_ERROR
- ¥15 根据历年月数据,用Stata预测未来六个月汇率
- ¥15 DevEco studio开发工具 真机联调找不到手机设备
- ¥15 请教前后端分离的问题
- ¥100 冷钱包突然失效,急寻解决方案
- ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet