刚接触字典的内容,然后就遇到字典和列表联系的相关代码编写,感觉和上课讲的没什么关联,下不去手,所以请问有人会这个代码吗
平均成绩其实可以在成绩录入时一并计算,写入学生成绩字典。但由于题目要求,我的代码是分步实施的。
代码运行效果截屏图片
代码
#!/sur/bin/nve python
# coding: utf-8
green = '\033[32m'
nocolor = '\033[0m'
filds = 'name', 'english', 'python', 'math'
scores = [] # 学生成绩列表。
for i in range(5): # 录入五个学生成绩。
name = input(f"\n{filds[0]}: ")
score = []
for fild in filds[1:]: # 循环录入学生三科成绩。
score += [int(input(f"{fild}: "))]
stu = [name] + score
fild = 'name', 'english', 'python', 'math'
scores.append(dict(zip(fild, stu))) # 生成学生成绩字典并追加到成绩列表scores 。
for i in range(len(scores)): # 遍历计算平均成绩。
stu = scores[i]
vag = (stu.get('english') + stu.get('english') + stu.get('english'))/3
stu['vag'] = round(vag, 1)
scores[i] = stu
scores.sort(reverse=True, key=lambda x: x.get('vag')) # 排序。
print(f"\n{'':~^50}\n{green}\n") # 输出颜色设置。
for stu in scores: # 成绩列表输出。
blank = '\n' + ' '*18
line = '~'*40
print(f"{blank}name: {stu.get('name')}{blank}english: {stu.get('english')}{blank}python: {stu.get('python')}{blank}math: {stu.get('math')}{blank}vag: {stu.get('vag')}\n{line:^50}")
print(f"{nocolor}\n{'':~^50}\n") # 取消颜色设置。
学生成绩字典输出,也可以用字典视图
for key, value in stu.items(): # 字典视图对象。
print(' '*19, key, value)
# 定义一个字典,key为学生姓名,value为对应的成绩
scores = {"张三": 90, "李四": 85, "王五": 95, "赵六": 80}
# 计算成绩平均值
average_score = sum(scores.values()) / len(scores)
# 按照成绩高低排序
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
# 输出结果
print("平均成绩为:", average_score)
print("学生成绩从高到低为:")
for name, score in sorted_scores:
print(name, ":", score)
不知道你这个问题是否已经解决, 如果还没有解决的话:题解:
本题需要求出学生成绩的平均值,并将结果按照从高到低排序输出。我们可以使用字典和列表来存储和处理数据。以下是具体的解决方案:
student_scores = {
'张三': 82,
'李四': 92,
'王五': 78,
'赵六': 66,
'钱七': 98,
}
scores = list(student_scores.values())
sum()
求出成绩总和,再除以学生人数(即字典键值对数目)求得平均值,如下所示:avg_score = sum(scores) / len(student_scores)
sort()
方法对成绩从高到低排序,如下所示:scores_sorted = sorted(scores, reverse=True)
for score in scores_sorted:
for name, s in student_scores.items():
if s == score:
print(name, score)
def avg_score_and_sort():
student_scores = {
'张三': 82,
'李四': 92,
'王五': 78,
'赵六': 66,
'钱七': 98,
}
scores = list(student_scores.values())
avg_score = sum(scores) / len(student_scores)
scores_sorted = sorted(scores, reverse=True)
for score in scores_sorted:
for name, s in student_scores.items():
if s == score:
print(name, score)
avg_score_and_sort()
# 输出结果为:
# 钱七 98
# 李四 92
# 张三 82
# 王五 78
# 赵六 66
综上所述,我们可以使用字典和列表结合的方式来实现求学生成绩平均值并按照高低排序输出。参考代码如下: