Dornann


私信TA

用户名:dotcpp0635303

访问量:1698

签 名:

唯其不可能,所以才值得期待

等  级
排  名 2888
经  验 2112
参赛次数 1
文章发表 13
年  龄 18
在职情况 学生
学  校 HEU
专  业

  自我简介:

是个帅币

解题思路:

    1.数据输入:

    通过input()函数获取输入的整数N,表示学生人数。

使用for循环迭代N次,每次输入一个学生的信息,包括学号(num)、姓名(name)、语文成绩(score_Chi)、数学成绩(score_Math)、英语成绩(score_Eng)。

    2.数据存储:

将每个学生的信息存储为字典,并添加到名为data的列表中。

    3.计算平均分:

    使用列表推导式和sum()函数计算语文、数学、英语的平均分,并将结果转为整数。

    存储在score_Chi_Ave、score_Math_Ave和score_Eng_Ave中。

    4.计算最高分:

    使用列表推导式和max()函数计算每个学生的总分,找到最高分并存储在score_Max中。

    5.找到最高分学生:

    使用enumerate()函数获取每个学生总分的索引和值。

    使用max()函数和key参数找到最高分的学生的索引。

    6.输出结果:

    打印平均分和最高分学生的学号、姓名、语文、数学、英语成绩。

注意事项:

    数据输入时,确保输入的数字N和每个学生的信息格式正确,否则可能导致程序错误。

    确保数据存储的格式正确,以便后续的计算和输出。

    考虑异常情况,例如除数为零的情况。如果N为零,可能导致除法错误。

    可以考虑对代码进行函数化,使其更易读和维护。例如,将计算平均分和最高分的部分封装成函数。


参考代码:

data = []
N = int(input())
for i in range(N):
    num, name, score_Chi, score_Math, score_Eng = input().split()
    data.append({
        "num": num,
        "name": name,
        "score_Chi": int(score_Chi),
        "score_Math": int(score_Math),
        "score_Eng": int(score_Eng)
    })

score_Chi_Ave = int(sum([d["score_Chi"] for d in data]) / N)
score_Math_Ave = int(sum([d["score_Math"] for d in data]) / N)
score_Eng_Ave = int(sum([d["score_Eng"] for d in data]) / N)
score_Max = max([d["score_Chi"] + d["score_Math"] + d["score_Eng"] for d in data])
Topstudent_index, _ = max(enumerate([d["score_Chi"] + d["score_Math"] + d["score_Eng"] for d in data]), key=lambda x: x[1])
print(score_Chi_Ave, score_Math_Ave, score_Eng_Ave)
print(data[Topstudent_index]["num"],
      data[Topstudent_index]["name"],
      data[Topstudent_index]["score_Chi"],
      data[Topstudent_index]["score_Math"],
      data[Topstudent_index]["score_Eng"])


 

0.0分

1 人评分

  评论区

  • «
  • »