首页 > 其他分享 >3. 统计学生成绩

3. 统计学生成绩

时间:2024-02-01 21:26:16浏览次数:29  
标签:String val gender 学生 course student scores 成绩 统计



object test3 {
  case class student(id: String, gender: String, score: Map[String, Int])

  //读取文件的方法:
  def inputStudentList(filename: String): List[student] = {
    // 读取文件并按行进行切割
    var lines = scala.io.Source.fromFile(filename).getLines.toList
    // 获取表头 :课程名 drop(2) 意思是去除前两个 即id 跟 gender
    val header = lines.head.split("\\s+").drop(2)
    // 解析每一行学生的信息
    val students = lines.tail.map { line =>
      val Array(id, gender, scores@_*) = line.split("\\s+")
      val scoreMap = header.zip(scores.map(_.toInt)).toMap
      student(id, gender, scoreMap)
    }
    students
}
  //计算 传入三个值 一个学生集合  一个课程名  一个性别筛选条件
  def calculateScore(student:List[student],course:String,genderFilter: Option[String] = None): (Double,Double,Double) ={
    val filterStudents = genderFilter match {
      case Some(gender)  =>student.filter(_.gender == gender)
      case None => student
    }
    val scores = filterStudents.flatMap(_.score.get(course))
    val average = scores.sum.toDouble / scores.size
    val min = scores.min
    val max = scores.max
    (average,min,max)
  }
  def main(args: Array[String]): Unit = {
    val students = inputStudentList("G:\\scalaCode\\untitled1\\src\\student1.txt")
    val header = students.head.score.keys.toList
    val genders = List("male", "female")
    println(s"course\taverage\tmin\t\tmax")
    for (course <- header) {
      val (average, min, max) = calculateScore(students, course)
      println(f"$course\t${"%.2f".format(average)}\t${"%.2f".format(min)}\t${"%.2f".format(max)}")
    }
    for (gender <- genders) {
      println(s"\ncourse\taverage\tmin\t\tmax ($gender)")
      for (course <- header) {
        val (average, min, max) = calculateScore(students, course, Some(gender))
        println(f"$course\t${"%.2f".format(average)}\t${"%.2f".format(min)}\t${"%.2f".format(max)}")

      }
    }
  }
}

标签:String,val,gender,学生,course,student,scores,成绩,统计
From: https://www.cnblogs.com/lin513/p/18002129

相关文章

  • Java实现学生信息管理系统:从Excel中提取数据的实用方法
    在Java中实现学生信息管理系统并从Excel中读取数据,通常适用于以下场景:数据迁移和集成:如果你有一个现存的学生信息管理系统,该系统可能使用数据库或其他存储方式,但你想将这些数据迁移到新的系统。Excel文件可能提供了一种方便的方式来迁移这些数据,因为Excel文件格式易于查看和编辑。......
  • 最新大专考试题目搜题软件?如何选择一款适合大学生使用的搜题工具?
    作为当代大学生,我们常常面临着繁重的学业压力和众多的学习任务。在这个信息爆炸的时代,如何高效地进行搜题和学习成了我们迫切需要解决的问题。幸运的是,随着科技的不断进步,我们拥有了许多方便、实用的日常搜题和学习软件。1.百词斩百词斩是针对英语学习开发的一款“图背单词软件”,软......
  • Python实现学生信息管理系统
    学生信息管理系统系统设计系统功能结构 录入学生信息模块查找学生信息模块删除学生信息模块修改学生信息模块学生成绩排名模块统计学生总人数模块显示全部学生信息模块系统业务流程 用户->主界面->功能菜单->选择功能->是否为0->y->结束程序主函数设计 主函数的业务......
  • PMP成绩查询及电子版证书下载
    2023年11月25日PMP考试成绩今日凌晨开始发布,按照往年的情况,成绩都是分批出的,如果暂时没查到成绩的同学请耐心等待,预计一周内成绩会全部出来。原创:厦门微思网络 【微思2002年成立,专业IT认证培训21年!】 我们主要课程:华为、思科、红帽、ORACLE、VMware、CISP、PMP等认证培训及考......
  • python 一个能统计txt文件的每个单词出现次数的python程序; 统计txt文件里每个汉字出
    输出的时候排列顺序是从多到少,需要去除txt中的特殊符号,注意是英文txt文件用来自制词汇包的hhhimportrefromcollectionsimportCounterdefcount_words(file_path):#读取文本文件内容withopen(file_path,'r',encoding='utf-8')asfile:text=file.read......
  • 洛谷题单指南-暴力枚举-P2241 统计方形(数据加强版)
    原题链接:https://www.luogu.com.cn/problem/P2241题意解读:要在整个n*m区域计算正方形和长方形的个数,枚举法即可。解题思路:此题枚举的对象是矩形的高i和宽j,高的范围[1,n],宽的范围[1,m],然后计算在n*m区域内有多少个i*j,i==j即属于正方形,i!=j属于长方形。那么,问题就集中在了......
  • KY27 查找学生信息C++
    用map做查找就行了。#include<iostream>#include<string>#include<map>usingnamespacestd;structnode{stringname;stringx;intage;};typedefstructnodesinfo;intmain(){intn;while(cin>>n){map<......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,使用 row_number() over
    在处理大数据量数据集时,我们经常需要进行分组统计。而在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,通过设置row_num<=100的条件,我们可以限定每组最多数量为100。本文将详细介绍如何使用这种方法进行分组统计。一、row_......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,使用 row_number() over
    在处理大数据量数据集时,我们经常需要进行分组统计。而在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,通过设置row_num<=100的条件,我们可以限定每组最多数量为100。本文将详细介绍如何使用这种方法进行分组统计。一、row......
  • 学生压力大,这6款搜题软件,可以帮你轻松找答案!
    随着大学课程的增多和知识的不断积累,大学生们常常面临着繁重的作业和复杂的题目。为了解决这一问题,许多大学生搜题软件应运而生。1.爱学Excel教程爱学Excel教程是一款可以让你快速学习办公软件的教学应用里面有使用技巧以及知识点,图文并茂并且搭配视频的教学,完全免费,且无任何的广......