大三寒假学习进度(二十八)

总的来说,今天主要复习了scala的基础知识,学习了深度学习的概况。

 

/**
* @Description:
* @author: LiuGe
* @date: 2021/2/4
*/
object Exp02_03 {

/*
学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号、性别、课程名1、课程名 2 等
后面每一行代表一个学生的信息,各字段之间用空白符隔开
给定任何一个如上格式的清单(不同清单里课程数量可能不一样),要求尽可能采用函数式编程
统计出各门课程的平均成绩,最低成绩,和最高成绩
另外还需按男女同学分开,分别统计各门课程的平均成绩,最低成绩,和最高成绩。
*/
def main(args: Array[String]): Unit = {
// 从文件中读取测试数据
val source1: BufferedSource = Source.fromFile("datas/test1.txt")
// val source2: BufferedSource = Source.fromFile("datas/test2.txt")
// 把每行数据切割
val splitSource: List[Array[String]] = source1.getLines().map(_.split(" ")).toList
// 获取学科名称
val courseNames: Array[String] = splitSource.head.drop(2)
// 获取所有学生的信息
val allStudents = splitSource.tail
// 获取课程数量
val courseNum = courseNames.length

// 统计各门课程的平均成绩,最低成绩,最高成绩
val studentInfo = getData(allStudents, courseNum)
println("course average min max")
printResult(courseNames, studentInfo)

// 按性别过滤数据
val maleLines = allStudents.filter(_ (1) == "male")
val femaleLines = allStudents.filter(_ (1) == "female")

// 男生 输出结果
val maleResult = getData(maleLines, courseNum)
println("course average min max (Male)")
printResult(courseNames, maleResult)

// 女生 输出结果
val femaleResult = getData(femaleLines, courseNum)
println("course average min max (Female)")
printResult(courseNames, femaleResult)

}

def getData(lines: List[Array[String]], courseNum: Int) = {
// 通过for循环生成 (平均分,最低分,最高分) 三元组
(for (i <- 2 to courseNum + 1) yield {
//取出需要统计的列
val temp = lines.map {
elem => elem(i).toDouble
}
(temp.sum, temp.min, temp.max)
}).map {
case (total, min, max) => (total / lines.length, min, max)
}
}

//输出结果函数
def printResult(courseNames: Array[String], theResult: Seq[(Double, Double, Double)]) {
// 通过zip方法合并课程名称和数值
(courseNames zip theResult).foreach {
case (course, result) =>
println(f"${course + ":"}%-10s${result._1}%5.2f${result._2}%8.2f${result._3}%8.2f")
}
}

}

posted @ 2021-02-08 15:17  烈日灼心h  阅读(26)  评论(0编辑  收藏  举报