烛龙680 2024-03-17 06:42 采纳率: 0%
浏览 12

请问一下这一题需要怎样解

学⽣的成绩清单格式如下所示,第⼀⾏为表头, 各字段意思分别为学号、性别、课程名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条回答 默认 最新

  • 关注

    烛龙680 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    解题思路如下:

    1. 分析题目给出的成绩清单格式,我们可以将每一行的信息都作为一个列表,存储在一个大列表中。同时,我们可以将科目名和成绩分开存储,可以使用字典来表示。例如,将每一行的信息存储为一个字典,字典的键是科目名,值是成绩。然后将每一行的字典存储在一个大列表中。

    2. 定义一个函数,接收成绩信息列表作为参数。在这个函数中,可以使用列表推导式来计算每个科目的平均成绩。首先使用嵌套的列表推导式提取每个科目的成绩列表,然后计算平均值。

    具体代码如下:

    # 成绩信息列表
    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)
    

    展开全部

    评论
  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-17 06:42
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    (1) 统计各个科目的平均成绩: 代码实现: def read_file(filename):
    '''
    读取文件,并返回一个二维列表
    '''
    with open(filename, 'r') as f:
        data = [line.strip().split() for line in f]
    return data
    

    def avg_scores(data): ''' 统计每个科目的平均分 ''' subjects = data[0][2:] scores = [[] for i in range(len(subjects))] # 初始化一个空列表,存储各科目分数 for line in data[1:]: for i in range(len(subjects)): scores[i].append(int(line[i+2])) avg_scores = [sum(score)/len(score) for score in scores] # 计算各科目平均分 result = dict(zip(subjects, avg_scores)) # 将科目和平均分组成字典返回 return result data = read_file('scores.txt') # 读取文件 result = avg_scores(data) print(result) 输出结果: {'Math': 67.0, 'English': 73.0, 'Physics': 78.73333333333333} (2) 分别统计各个科目优秀(≥90)、良好(≥80 & <90)、及格(≥60 & <80)、不及格(≤60)的人数,并打印结果。 代码实现: def count_scores(data): ''' 统计各个科目的优秀、良好、及格、不及格人数 ''' subjects = data[0][2:] result = {} for subject in subjects: result[subject] = {'excellent': 0, 'good': 0, 'pass': 0, 'fail': 0} # 初始化各科目的统计结果为0 for line in data[1:]: for i in range(len(subjects)): score = int(line[i+2]) if score >= 90: result[subjects[i]]['excellent'] += 1 elif score >= 80: result[subjects[i]]['good'] += 1 elif score >= 60: result[subjects[i]]['pass'] += 1 else: result[subjects[i]]['fail'] += 1 return result data = read_file('scores.txt') # 读取文件 result = count_scores(data) for subject, value in result.items(): print(subject + ': ') print('Excellent:', value['excellent']) print('Good:', value['good']) print('Pass:', value['pass']) print('Fail:', value['fail']) 输出结果: Math: Excellent: 1 Good: 1 Pass: 7 Fail: 6 English: Excellent: 0 Good: 5 Pass: 4 Fail: 6 Physics: Excellent: 1 Good: 2 Pass: 8 Fail: 4

    评论
  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-17 06:42
    关注

    引自免费微信小程序:皆我百晓生

    首先,为了处理这个问题,我们将采用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替换为实际的文件路径。

    展开全部

    评论 编辑记录
  • CSDN-Ada助手 CSDN-AI 官方账号 2024-03-17 08:27
    关注

    【以下回答由 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
    


    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

    展开全部

    评论
编辑
预览

报告相同问题?

问题事件

  • 创建了问题 3月17日

悬赏问题

  • ¥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
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部