【scala】阶段性练习

news2025/7/7 1:33:54

快速学习scala语法和数据结构,完成以下作业内容。

作业内容:

以下数据包含了某大学某专业学生的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
Jack,DataBase,92
Jack,Algorithm,62
Jack,DataStructure,82


问题描述

请根据以上给定的实验数据,在scala中通过编程来计算以下内容:
(1)该系总共有多少学生;
(2)该系共开设了多少门课程;
(3)Tom同学的总成绩平均分是多少;
(4)求每名同学的选修的课程门数;
(5)该系DataBase课程共有多少人选修;
(6)各门课程的平均分是多少;


参考代码:

import scala.collection.mutable

object Homework {
  def main(args: Array[String]): Unit = {
    val map = Map(
      ("Tom", "DataBase") -> 80,
      ("Tom", "Algorithm") -> 50,
      ("Tom", "DataStructure") -> 60,
      ("Jim", "DataBase") -> 90,
      ("Jim", "Algorithm") -> 60,
      ("Jim", "DataStructure") -> 80,
      ("Jack", "DataBase") -> 92,
      ("Jack", "Algorithm") -> 62,
      ("Jack", "DataStructure") -> 82
    )
    // 该系总共有多少学生;
    printf("该系总共有%d名学生\n", calculate_department_length(map))
    // 该系共开设了多少门课程;
    printf("该系共开设了%d门课程\n", calculate_course_length(map))
    //Tom同学的总成绩平均分是多少;
    printf("Tom同学的总成绩平均分是%.2f\n", calculate_student_average_grade(map, "Tom"))
    //求每名同学的选修的课程门数;
    val set_student = mutable.Set[String]()
    val set_course = mutable.Set[String]()
    map.keys.foreach(tuple => {
      set_student += tuple._1
      set_course += tuple._2
    })
    for (student <- set_student) {
      printf("%s同学的选修的课程门数是%d\n", student, calculate_student_course_num(map, student))
    }
    // 该系DataBase课程共有多少人选修
    printf("该系DataBase课程共有%d人选修\n", calculate_course_num(map, "DataBase"))

    // 各门课程的平均分是多少;
    for (course <- set_course) {
      printf("%s课程的平均分是%.2f\n", course, calculate_course_average_grade(map, course))
    }

  }


  def calculate_department_length(map: Map[(String, String), Int]): Int = {
    // 定义一个可变set
    // 使用return 这样看起来比较舒服,和python3.10语法很像
    val set = mutable.Set[String]()
    for (student <- map.keys) {
      set += student._1
    }
    return set.size
  }

  def calculate_course_length(map: Map[(String, String), Int]): Int = {
    val set = mutable.Set[String]()
    for (student <- map.keys) {
      set += student._2
    }
    return set.size
  }

  def calculate_student_average_grade(map: Map[(String, String), Int], student_name: String): Double = {
    var grade: Double = 0
    val set = mutable.Set[String]()
    for (student <- map.seq) {
      if (student._1._1 == student_name) {
        set += student._1._2 //计算这名学生的课程数量
        grade += student._2 //计算学生总成绩
      }
    }
    return grade / set.size
  }

  def calculate_student_course_num(map: Map[(String, String), Int], student_name: String): Int = {
    val set = mutable.Set[String]()
    for (student <- map.seq) {
      if (student._1._1 == student_name) {
        set += student._1._2 //计算这名学生的课程数量
      }
    }
    return set.size
  }

  def calculate_course_num(map: Map[(String, String), Int], course_name: String): Int = {
    var length: Int = 0
    for (student <- map.seq) {
      if (student._1._2 == course_name) {
        length += 1 //该系课程共有多少人选修;
      }
    }
    return length
  }

  def calculate_course_average_grade(map: Map[(String, String), Int], course_name: String): Double = {
    var grade: Double = 0
    var length: Int = 0

    for (student <- map.seq) {
      if (student._1._2 == course_name) {
        length += 1 //该系课程共有多少人选修;
        grade += student._2 // 计算总成绩
      }
    }
    return grade / length
  }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解容灾架构中的脑裂问题

【摘要】对于容灾架构来讲,脑裂是灾难性的事件,本文详细介绍了优先级解决方案、仲裁解决方案、仲裁冲突问题,对于了解相关场景及解决相关问题大有裨益,欢迎阅读。(文中涉及相关技术产品最新参数请以官网最新发布为准) 1. 什么是容灾中的脑裂问题? 脑裂(split-brain)就…

WinHex使用方法详解

WinHex是由X-Ways软件技术公司&#xff08;官方网站http://www.x-ways.net&#xff09;开发的一款专业的磁盘编辑工具&#xff0c;该工具文如其名&#xff0c;是在Windows下运行的十六进制&#xff08;hex&#xff09;编辑软件&#xff0c;能够支持Windows XP、Windows 2003、W…

简单DIV+CSS学生网页设计——电影请以你的名字呼唤我(4页)带音乐特效

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

JavaScript面向对象:面向对象案例

面向对象版 tab 栏切换 功能需求: 1.点击 tab栏,可以切换效果. 2.点击 号, 可以添加 tab 项和内容项. 3.点击 x 号, 可以删除当前的tab项和内容项. 双击tab项文字或者内容项文字,可以修改里面的文字内容 基本结构 抽象对象: Tab 对象 1.该对象具有切换功能 2.该对象具…

3、skywalking-安装(Docker-Compose方式)

1、章节简介 上一章节中&#xff0c;skywalking服务已经在vm1上部署完成此章节内容是将我们自己的服务注册到vm1上的sky中 2、集成步骤小计 2.1、上传sky客户端tar包到vm2 2.2、将项目打成jar包 2.3、编写Dockerfile文件 2.4、build镜像 2.5、查看镜像 2.6、运行镜像 2.7、浏览…

代码随想录62——额外题目【数组】:189轮转数组、724寻找数组的中心下标、922按奇偶排序数组II

文章目录1.189轮转数组1.1.题目1.2.解答2.724寻找数组的中心下标2.1.题目2.2.解答3.922按奇偶排序数组II3.1.题目3.2.解答1.189轮转数组 参考&#xff1a;代码随想录&#xff0c;189轮转数组&#xff1b;力扣题目链接 1.1.题目 1.2.解答 这道题目在字符串里其实很常见&#…

2022债市波动分析

2022债市波动分析 – 潘登同学的宏观经济分析框架 文章目录2022债市波动分析 -- 潘登同学的宏观经济分析框架波动事实波动原因人民币贬值压力811汇改前后经济稳中向好债市去杠杆债券市场的未来总结波动事实 2022年11月14日&#xff0c;反映债券价格的“中债总净价指数”单日下…

振弦采集模块使用流程

振弦采集模块使用流程 本章主要内容为 VM 模块基本工作原理以及工作参数、实时数据解释说明。 模块出厂时的默认参数值能够满足大部分振弦传感器的数据读取&#xff0c; 无特殊情况不需要修改参数。若需要修改某些参数时&#xff0c; 务必详细阅读本章内容以便参数含义。 错误…

改进粒子群算法求解电力系统经济调度问题(Matlab实现)

目录 1 相关知识点 2 Matlab完整代码实现 3 结果及可视化 1 相关知识点 这里总结一位博主的目录&#xff1a;梳理如下&#xff1a; 粒子群算法&#xff08;带约束处理&#xff09;——Python&Matlab实现 智能优化算法——粒子群算法&#xff08;Matlab实现&#xff09…

Docker概述及CentOS安装Docker

目录 一、Docker概述 Docker与虚拟机的差异 镜像和容器 Docker和DockerHub Docker架构 二、CentOS安装Docker 安装docker 卸载docker 启动docker 配置镜像加速 一、Docker概述 Docker 是一个用于开发、交付和运行应用程序的开放平台。 Docker 使您能够将应用程序与基…

国产软件厂商如何获得持久的竞争力和可持续增长?

近年来&#xff0c;美国对中国信息技术产业的制裁力度不断加大&#xff0c;华为等数百家中国高科技企业受波及而影响业务。加大自主研发力度&#xff0c;在芯片、操作系统、数据库、软件等卡脖子的关键技术领域&#xff0c;实现自主安全可控&#xff0c;成为中国信息科技产业发…

SpringMVC:拦截器+文件上传下载, 拦截器

一。比较常用&#xff08;理解思路&#xff09; 过滤器 和 拦截器 均体现了AOP的编程思想&#xff0c;都可以实现诸如日志记录、登录鉴权等功能&#xff0c;但二者的不同点也是比较多的&#xff0c;接下来一一说明。 拦截器&#xff1a;看做是多个Controller中公用的功能&…

【Linux】文件描述符

目录&#x1f308;前言&#x1f337;1、文件的概念&#x1f339;2、文件操作&#xff08;C语言&#xff09;&#x1f361;2.1、概念基本打开关闭操作&#x1f362;2.2、文件的打开方式&#x1f363;2.3、文件的读写操作&#x1f364;2.4、对系统调用的封装&#x1f338;3、系统…

python 另一种将内容写入记事本的方式

目录 问题描述&#xff1a; 方案一 &#xff08;常见的写法&#xff09;&#xff1a; 方案二&#xff1a; 问题描述&#xff1a; 如下图所示&#xff0c;欲将下图内容写入一个.txt 方案一 &#xff08;常见的写法&#xff09;&#xff1a; 使用f.write()函数&#xff0c; 如…

如何使用CompletableFuture

目录 一、CompletableFuture是什么 二、CompletableFuture用法 2.1、创建CompletableFuture 2.1.1、直接创建 2.1.2、创建一个使用指定数据作为结果的已结束的CompletableFuture 2.1.3、通过执行异步任务获取CompletableFuture 2.2、获取任务结果 2.3、消费结果 2.3.1、…

云原生技术中台 CNStack2.0 正式发布

作者&#xff1a;奥陌 11 月 5 日&#xff0c;在 2022 杭州 云栖大会上&#xff0c;云原生技术中台 CNStack2.0 正式发布。 阿里巴巴资深技术专家 谢吉宝介绍 CNStack2.0 企业在数字化转型的过程中&#xff0c;一部分问题得到了解决&#xff0c;但随着 IT 水平的不断提升&am…

【Milvus的人脸检索】

0. 介绍 在上一篇文章中&#xff0c;介绍了milvus提供的以图搜图的样例&#xff0c;这篇文章就在以图搜图样例的基础上进行修改&#xff0c;实现人脸检索。 常见的人脸任务&#xff0c;分为人脸检测、人脸识别、人脸对比和人脸检索&#xff0c;其中人脸检索的含义是&#xff…

点成分享 | 蛋白质浓度测定之考马斯亮蓝(Bradford)法

蛋白质是组成生物细胞、组织的重要成分&#xff0c;生物的所有生命活动都离不开蛋白质的参与。蛋白质是生命的物质基础&#xff0c;是构成细胞的基本有机物&#xff0c;是生命活动的主要承担者。生物材料中蛋白质含量的测定是生物学研究中最重要也是最基本的实验操作之一&#…

【微机接口】串行通信基础

计算机通信:CPU与外部的信息交换 并行通信&#xff1a;数据所有位同时被传输 串行通信&#xff1a;数据被逐位顺序传送 串行通信类型&#xff1a; 串行异步通信&#xff1a;一个字符用起始位和停止位来完成收发同步。 串行同步通信&#xff1a;采用同步字符来完成收发双方同…

营丘福稻品牌山东大米 国稻种芯·中国水稻节:淄博高青招牌

营丘福稻品牌山东大米 国稻种芯中国水稻节&#xff1a;淄博高青招牌 淄博市广播电视台新生活 大众网海报新闻记者 董玉歌 淄博报道) 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健…