day7字典和集合作业

1.声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明)

info = [('姓名','小小'),('年龄',19),('成绩',100),('电话','120'),('性别','不明')]
stu_dic = dict(info)
print(stu_dic)

2.声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)
a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字

​ f.删除性别不明的所有学生

​ g.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

students = [
    {'姓名': '小小', '年龄': 19, '成绩': 100, '电话': '120', '性别': '不明'},
    {'姓名': '小大', '年龄': 5, '成绩': 23, '电话': '110', '性别': '男'},
    {'姓名': '大小', '年龄': 77, '成绩': 56, '电话': '114', '性别': '女'},
    {'姓名': '大大', '年龄': 46, '成绩': 67, '电话': '123', '性别': '不明'},
    {'姓名': '中中', '年龄': 12, '成绩': 35, '电话': '119', '性别': '女'},
    {'姓名': '小中', '年龄': 45, '成绩': 75, '电话': '888', '性别': '男'},
]

# a.不及格个数
print(sum([True 
           for stu in students 
           if stu['成绩'] < 60]))

# b.不及格名字、成绩
print([(stu['姓名'], stu['成绩']) 
       for stu in students 
       if stu['成绩'] < 60])

# c.未成年个数
print(sum([True 
           for stu in students 
           if stu['年龄'] < 18]))

# d.手机尾号是8的学生名字
print([stu['姓名'] 
       for stu in students 
       if stu['电话'][-1] == '8'])

# e.最高分、名字
best_score = max([stu['成绩'] 
                  for stu in students])
print([(stu['成绩'], stu['姓名']) 
       for stu in students 
       if stu['成绩'] == best_score])

# f.删除性别不明的学生
[students.remove(stu) 
 for stu in students.copy() 
 if stu['性别'] == '不明']
print(students)

# g.排序列表按学生成绩从,大到小
scores = [stu['成绩'] 
          for stu in students]
print([stu 
       for score in sorted(scores, reverse=True) 
       for stu in students 
       if stu['成绩'] == score])

3.用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字

subject1 = {'小名', '小关', '小光', '小明', '小飞', '小红', '小朱', '小葱', '小艾'}
subject2 = {'小傻', '小本', '小德', '小关', '小海', '小妮', '小葛', '小飞', '小杰'}
subject3 = {'小强', '小明', '小朱', '小红', '小德', '小紫', '小艾', '小马', '小飞'}

# a. 求选课学生总共有多少人
all_stu = subject1 | subject2 | subject3
print(f'选课的共有{len(all_stu)}人。\n')

# b. 求只选了第一个学科的人的数量和对应的名字
only_sub1 = subject1 - subject2 - subject3
print(f'只选了第一个学科的有{len(only_sub1)}人,分别是:{[stu for stu in only_sub1]}。\n')

# c. 求只选了一门学科的学生的数量和对应的名字
only_one = subject1 ^ subject2 ^ subject3
print(f'只选了一门学科的有{len(only_one)}人,分别是:{[stu for stu in only_one]}。\n')

# e. 求选了三门学生的学生的数量和对应的名字
only_three = subject1 & subject2 & subject3
print(f'选了三门的有{len(only_three)}人,分别是:{[stu for stu in only_three]}。\n')

# d. 求只选了两门学科的学生的数量和对应的名字
only_two = all_stu - only_one - only_three
print(f'只选了两门的有{len(only_two)}人,分别是:{[stu for stu in only_two]}。\n')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值