用户输入考号、姓名、成绩,输出相应结果

用户输入考号、姓名和成绩,需用逗号隔开。按照降序输出考号、姓名和平均成绩。
比如请输入考号姓名成绩:203,张三,90
请输入考号姓名成绩:201,李四,60
请输入考号姓名成绩:203,张三,80
请输入考号姓名成绩:201,李四,70
请输入考号姓名成绩:
输出:203 张三 85
201 李四 65
python编程

另一种办法使用pandas,按照考号计算平均成绩输出显示:


import pandas as pd

data = []
while True:
    input_str = input("请输入考号姓名成绩:")
    if input_str == "":
        break
    input_list = input_str.split(",")
    if len(input_list) != 3:
        print("输入格式有误,请重新输入!")
        continue
    try:
        score = int(input_list[2])
    except ValueError:
        print("输入的成绩不是数字,请重新输入!")
        continue
    id, name = input_list[:2]
    data.append([id, name, score])

df = pd.DataFrame(data, columns=['考号', '姓名', '成绩'])
df['平均成绩'] = df.groupby('考号')['成绩'].transform('mean')
df = df.sort_values(by=['平均成绩'], ascending=False)
print(df[['考号', '姓名', '平均成绩']])


该回答引用ChatGPT

scores = {}  # 定义一个空字典来存储成绩信息

while True:
    input_str = input("请输入考号姓名成绩(按q退出):")
    if input_str == 'q':
        break
    
    info = input_str.split(',')
    if len(info) != 3:
        print("输入格式错误,请重新输入!")
        continue
    
    try:
        stu_id = int(info[0])
        score = float(info[2])
    except ValueError:
        print("输入格式错误,请重新输入!")
        continue
    
    if stu_id not in scores:
        scores[stu_id] = [info[1], score, 1]  # 姓名、总成绩、科目数
    else:
        scores[stu_id][1] += score
        scores[stu_id][2] += 1

# 计算平均成绩并按平均成绩降序排序
sorted_scores = sorted(scores.items(), key=lambda x: x[1][1]/x[1][2], reverse=True)

# 输出结果
for stu_id, data in sorted_scores:
    name = data[0]
    avg_score = round(data[1]/data[2], 2)
    print(f"{stu_id} {name} {avg_score}")

运行结果
请输入考号姓名成绩(按q退出):203,张三,90
请输入考号姓名成绩(按q退出):201,李四,60
请输入考号姓名成绩(按q退出):203,张三,80
请输入考号姓名成绩(按q退出):201,李四,70
请输入考号姓名成绩(按q退出):q
203 张三 85.0
201 李四 65.0