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 人选了三门课