m0_58315072 2021-05-27 22:44 采纳率: 33.3%
浏览 210

学生成绩汇总python

首先定义一个函数 GeneralGrade,期中包含中考分数M_exam、末考分数E_exam、中考占比Rate 三个参数,Rate参数缺省的话取值0.4 ;函数首先按比例将中考、末考成绩折算为总评分数,然后将总评分数转换为等级制(A、B、C、D、F)以字符串形式返回, 其中A(>=90)、B( 80+)、C(70+)、D(60+)、F(60以下)。 #初始状态,有以下两批次的成绩单,包括以下四个字典 mid_exam={"Tommy":78,"Jarry":89,"Sunny":93,"Honey":78,"Lily":80} #期中考试成绩主成绩单 姓名:分数 end_exam={"Tommy":60,"Jarry":69,"Sunny":88,"Honey":61,"Lily":88} #期末考试成绩主成绩单 姓名:分数 mid_exam0={"Money":56,"Crazy":99,"Windy":75,"Cloudy":87,"Lily":68} #期中考试成绩单补充材料 end_exam0={"Money":66,"Cloudy":94,"Crazy":77,"Windy":82,"Lily":90} #期末考试成绩单补充材料 在此基础上,接下来设计主程序程序完成以下任务 : 1. 将其中、期末的补充成绩单合并到主成绩单中,成绩不一致的以补充材料为准; 2.使用空的Input函数接收键盘输入一个纯小数赋值给rate,确定总评成绩中 期中考试分数的占比,然后以此为依据,使用开篇自定义的函数计算每个学生的总评成绩(等级制),生成一个包含所有学生的新字典Total_score,条目结构为 姓名: [期中,期末,总评等级] ; 注意:计算之前判断rate是否为0--1之间的纯小数,是的话 三个参数调用自定义函数GeneralGrade,否则本次输入的rate数据作废, 使用两个参数调用自定义函数GeneralGrade,rate取函数缺省值进行计算。 3. 使用空的Input函数接收键盘输入一个学生姓名(大小写通用),按姓名查找其详细成绩并以列表形式打印输出,以空格结束; 4.提取所有人的总评成绩的等级组成一个集合Grades,循环检测集合中缺少的成绩类型并输出,每个输出都以空格结束。 输入描述 无任何提示信息的input(),输入一个纯小数,如: 0.4 无任何提示信息的input(),输入学生姓名,如:sunny 输出描述 [78, 61, 'C'] F 样例输入1: 0.6 Honey 样例输出1: [78, 61, 'C'] F 样例输入2: 0.6 honey 样例输出2: [78, 61, 'C'] F 语言 Python 代码(请注意:不要出现中文)

  • 写回答

1条回答 默认 最新

  • 编程漫步者 2023-03-03 14:10
    关注
    def GeneralGrade(M_exam, E_exam, Rate=0.4):
        score = M_exam * Rate + E_exam * (1 - Rate)
        if score >= 90:
            return 'A'
        elif score >= 80:
            return 'B'
        elif score >= 70:
            return 'C'
        elif score >= 60:
            return 'D'
        else:
            return 'F'
    
    mid_exam = {"Tommy":78, "Jarry":89, "Sunny":93, "Honey":78, "Lily":80}
    end_exam = {"Tommy":60, "Jarry":69, "Sunny":88, "Honey":61, "Lily":88}
    mid_exam0 = {"Money":56, "Crazy":99, "Windy":75, "Cloudy":87, "Lily":68}
    end_exam0 = {"Money":66, "Cloudy":94, "Crazy":77, "Windy":82, "Lily":90}
    
    mid_exam.update(mid_exam0)
    end_exam.update(end_exam0)
    for name in mid_exam:
        if name in end_exam:
            if end_exam[name] != mid_exam[name]:
                if end_exam0.get(name, None):
                    end_exam[name] = end_exam0[name]
                else:
                    mid_exam[name] = end_exam[name]
    
    rate = float(input().strip())
    if not 0 < rate < 1:
        print("Input rate error")
    else:
        Total_score = {}
        for name in mid_exam:
            M_exam = mid_exam[name]
            E_exam = end_exam[name]
            if 0 < rate < 1:
                grade = GeneralGrade(M_exam, E_exam, rate)
            else:
                grade = GeneralGrade(M_exam, E_exam)
            Total_score[name] = [M_exam, E_exam, grade]
    
        search_name = input().strip()
        if search_name in Total_score:
            print(Total_score[search_name])
        else:
            print("The student does not exist")
    
        Grades = set([Total_score[name][2] for name in Total_score])
        missing_grades = set(['A', 'B', 'C', 'D', 'F']) - Grades
        for grade in missing_grades:
            print(grade, end=' ')
    
    

    输出结果:

    img

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?