编程练习题:学生成绩统计系统

题目描述:

请编写一个学生成绩统计程序,实现以下功能:

  1. 循环接收用户输入的学生成绩(整数),输入 q 时结束输入;
  2. 输入过程中如果输入非数字(且不是 q),提示 “输入格式错误,请重新输入!”;
  3. 输入结束后,统计并输出以下信息:
    • 输入的所有成绩列表
    • 总人数
    • 平均成绩
    • 最高分
    • 最低分
    • 合格人数(成绩≥60 分)
    • 优秀人数(成绩≥85 分)
    • 优秀率(优秀人数 / 总人数 ×100,保留 2 位小数)
输入要求
  • 成绩为整数,范围不限(无需校验成绩是否在 0-100 之间);
  • 结束输入的标识为小写字母 q(输入大写 Q 无需处理,按格式错误提示);
  • 输入时忽略首尾空格(例如输入 90 视为有效输入,转换为 90)。

写好了吗?写好了再看哦~

#————————————成绩统计程序(列表小练习)——————————————————
print('请输入学生成绩,结束请输入‘q’:    ')
scores=[ ]
while True:
    use_input=input().strip()
    if use_input=='q':
        print('输入结束')
        break
    try:
        score=int(use_input)
        scores.append(score)
    except ValueError:
        print('输入格式错误,请重新输入!')
print('您输入的成绩是',scores)
    #总人数
total=len(scores)
    # 总人数最高分
max_score = max(scores)
    # 最低分
min_score = min(scores)
pas=0 #记录合格人数
excl=0  #记录优秀人数
for score in scores:
    if score>=60:
        pas+=1
    if score>=85:
        excl+=1
    # 优秀率
rate=excl/total*100
    # 平均成绩
avg=sum(scores)/total
print(f'总人数为:{total}')
print(f'平均成绩:{avg}')
print('最高分是', max_score)
print('最低分是' , min_score)
print('合格人数:',pas)
print('优秀人数:',excl)
print('优秀率:',rate)

编程练习题:数据容器综合练习

练习一:水果价格统计
题目描述:

给定一个存储水果名称和单价的字典,实现以下功能:

  1. 遍历并打印所有水果的名称;
  2. 找出字典中单价最高的水果,并输出其名称和价格(保留 1 位小数)。
给定字典
fruits = {
    '苹果': 4.5,
    '香蕉': 3.2,
    '西瓜': 5.8
}
输出示例
苹果
香蕉
西瓜
最贵的水果是:西瓜,它的价格是:5.8元一斤
解题提示
  • 遍历字典默认获取键(水果名称);
  • 使用 max(字典, key=字典.get) 可根据值找到对应的键,是字典常用技巧。

练习二:学生成绩分析
题目描述:

给定一个嵌套字典的学生成绩列表,实现以下功能:

  1. 遍历每个学生,计算其语文、数学、英语三科的平均分(保留 1 位小数)并输出;
  2. 计算每个学生的总分,找出总分最高的学生(支持多人同分最高),输出其姓名列表和总分。
给定列表:
students = [
    {
        'name':'张三',
        'scores':{'语文':88,'数学':92,'英语':95}
    },
    {
        'name':'李四',
        'scores':{'语文':75,'数学':83,'英语':80}
    },
    {
        'name':'王五',
        'scores':{'语文':92,'数学':95,'英语':88}
    }
]
输出示例
张三的平均成绩是: 91.7
李四的平均成绩是: 79.3
王五的平均成绩是: 91.7
总分最高的学生是['张三', '王五'],他的总分是275
解题提示
  • 嵌套字典取值:stu['scores'].values() 可获取某学生所有科目成绩;
  • 处理 “多人同分最高” 需用列表存储姓名,通过判断总分与当前最高分的关系更新列表。

练习三:评论内容处理
题目描述

给定一段评论字符串,完成以下 3 个需求:

  1. 统计字符串中 “好喝” 出现的次数并输出;
  2. 将字符串中的 “贵” 替换为 “略高”,输出替换后的完整评论;
  3. 判断字符串是否包含 “推荐” 二字,输出对应的提示信息。
给定字符串
comment = "这家奶茶真好喝,环境也不错,就是价格有点贵,好喝好喝好喝!强烈推荐!"
输出示例
4
这家奶茶真好喝,环境也不错,就是价格有点略高,好喝好喝好喝!强烈推荐!
该评论里有‘推荐’两个字
解题提示
  • 字符串 count(子串) 可统计子串出现次数;
  • 字符串 replace(旧子串, 新子串) 可替换指定内容;
  • 判断是否包含子串也可直接用 if '推荐' in comment:,更简洁。

数据容器小练习代码答案(自己编写的,新手如果有冗余什么的,欢迎评论区指正):

————————————————————数据容器小练习——————————————
#练习一 买水果
fruits={
    '苹果':4.5,
    '香蕉':3.2,
    '西瓜':5.8
}
for fruit in fruits:
    print(fruit)
    # 找最贵的水果
    item=max(fruits,key=fruits.get)  #字典取出键值的很重要的方法
print(f'最贵的水果是:{item},他的价格是:{fruits[item]}元一斤')

#练习二:学生成绩表
students =[
    {
        'name':'张三',
        'scores':{'语文':88,'数学':92,'英语':95}
    },
    {
        'name':'李四',
        'scores':{'语文':75,'数学':83,'英语':80}
    },
    {
        'name':'王五',
        'scores':{'语文':92,'数学':95,'英语':88}
     }]

#计算平均分
flag=-1 #记录最高分学生
list_a=[] # 用于接收相同的分数最高的学生
names=''
for stu in students:
    score=stu['scores'].values()
    avg=sum(score)/len(score)
    print(f'{stu['name']}的平均成绩是: {avg: .1f}')

#找到总分最高的学生   根据scores 找到name
    a=sum(score) #计算总分
    if a>flag:
        flag=a  #找到总分最高的scores
        list_a=[stu['name']]
    elif a==flag:
        list_a.append(stu['name'])
print(f'总分最高的学生是{list_a},他的总分是{flag}')

#练习三:评论内容
comment="这家奶茶真好喝,环境也不错,就是价格有点贵,好喝好喝好喝!强烈推荐!"

#需求1:统计“好喝”出现次数
print(comment.count('好喝'))

#需求2:将字符串中的“贵”替换为“略高”
print(comment.replace('贵','略高'))

#需求3:是否包含“推荐”两个字
if comment.count('推荐')==0:
    print('该评论里没有‘推荐’两个字')
else:
    print('该评论里有‘推荐’两个字')

🎊如果你已经完成这个小练习,恭喜你到达练气三阶!🎊

请宿主继续加油!

更多推荐