Day7 作业

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

stu = {'name': '小罗', '年龄': 21, '成绩': 100, '电话': '12348437004', '性别': '男'}

2.声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)
a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字
f.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
g.删除性别不明的所有学生

stu_list = [
    {'name': '小罗', 'age': 21, 'score': 89, 'tel': '12348437004', 'sex': '男'},
    {'name': '小华', 'age': 17, 'score': 59, 'tel': '12348437008', 'sex': '男'},
    {'name': '小强', 'age': 20, 'score': 99, 'tel': '12348437006', 'sex': '女'},
    {'name': '小李', 'age': 21, 'score': 55, 'tel': '12348437005', 'sex': '不明'},
    {'name': '小刚', 'age': 17, 'score': 96, 'tel': '12348437007', 'sex': '男'},
    {'name': '小红', 'age': 21, 'score': 98, 'tel': '12348437009', 'sex': '不明'},
]

sc_count = age_count = max_score = 0
for stu in stu_list:
    if stu['score'] < 60:       # 打印不集合学生和成绩
        sc_count += 1
        print(stu['name'], stu['score'])    # 小华 59  小李 55

    if stu['age'] < 18:         # 统计未成年人数
        age_count += 1

    if stu['tel'][-1] == '8':       # 打印手机尾数为8的学生名字
        print(stu['name'], '手机尾数是8')    # 小华 手机尾数是8

    if max_score < stu['score']:        # 找出最高分
        max_score = stu['score']

for stu in stu_list:        # 打印最高分的学生名字
    if stu['score'] == max_score:
        print(stu['name'], '是最高分:', max_score)      # 小强 是最高分: 99
print('不及格的学生有:', sc_count, '个')   # 不及格的学生有: 2 个
print('未成年学生有:', age_count, '个')    # 未成年学生有: 2 个

# i = 0
# while i < len(stu_list):        # 从大到小排序
#     for n in range(i + 1, len(stu_list)):
#         if stu_list[i]['score'] < stu_list[n]['score']:
#             stu_list[i], stu_list[n] = stu_list[n], stu_list[i]
#     i += 1
# print(stu_list)


# def score_lis(elem):
#     return elem['score']
#
#
# stu_list.sort(reverse=True, key=score_lis)    # 定义函数调用
# print(stu_list)

stu_list.sort(reverse=True, key=lambda lis_score: lis_score['score'])   # 匿名函数
print(stu_list)
"""
[{'name': '小强', 'age': 20, 'score': 99, 'tel': '12348437006', 'sex': '女'},
{'name': '小红', 'age': 21, 'score': 98, 'tel': '12348437009', 'sex': '不明'},
{'name': '小刚', 'age': 17, 'score': 96, 'tel': '12348437007', 'sex': '男'},
{'name': '小罗', 'age': 21, 'score': 89, 'tel': '12348437004', 'sex': '男'},
{'name': '小华', 'age': 17, 'score': 59, 'tel': '12348437008', 'sex': '男'},
{'name': '小李', 'age': 21, 'score': 55, 'tel': '12348437005', 'sex': '不明'}]
"""

for n in range(len(stu_list)-1, -1, -1):    # 删除性别不明的学生
    if stu_list[n]['sex'] == '不明':
        stu_list.remove(stu_list[n])
print(stu_list)
"""
[{'name': '小强', 'age': 20, 'score': 99, 'tel': '12348437006', 'sex': '女'}, 
{'name': '小刚', 'age': 17, 'score': 96, 'tel': '12348437007', 'sex': '男'}, 
{'name': '小罗', 'age': 21, 'score': 89, 'tel': '12348437004', 'sex': '男'}, 
{'name': '小华', 'age': 17, 'score': 59, 'tel': '12348437008', 'sex': '男'}]
"""

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

class1 = ['Bob', 'Gerry', 'Alice', 'Beytagh']
class2 = ['Jack', 'Tom', 'Edward', 'Beytagh']
class3 = ['Tony', 'Jones', 'Alice', 'Beytagh']
print(len(set(class1 + class2 + class3)))   # 选课学生总共有多少人    9

set1 = set(class1)
set2 = set(class2)
set3 = set(class3)
new_set1 = set1.difference(set2, set3)
print(new_set1, len(new_set1), '人只选了第一门课')      # {'Bob', 'Gerry'} 2 人只选了第一门课

new_set2 = set2.difference(set1, set3)
new_set3 = set3.difference(set1, set2)
all_set = new_set1 | new_set2 | new_set3
print(all_set, len(all_set), '人只选了一门课')      # {'Edward', 'Jack', 'Tom', 'Jones', 'Bob', 'Gerry', 'Tony'} 7 只选了一门课

new_set1 = (set1 & set2).difference(set3)
new_set2 = (set3 & set2).difference(set1)
new_set3 = (set1 & set3).difference(set2)
all_set = new_set1 | new_set2 | new_set3
print(all_set, len(all_set), '人只选了两门课')     # {'Alice'} 1 人只选了两门课

thr_set = set1 & set2 & set3
print(thr_set, len(thr_set), '人选了三门课')      # {'Beytagh'} 1 人选了三门课

你可能感兴趣的:(Day7 作业)