**1.声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明)
students = {
'name': '张三',
'age': 18,
'score': 89,
'tel': 15121445277,
'sex': '男'
}
2.声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)
all_students = [
{ 'name': '张三','age': 21,'score': 89,'tel': '15121445271', 'sex': '男'},
{ 'name': '李四','age': 14,'score': 56,'tel': '15121445277', 'sex': '男'},
{ 'name': '王五','age': 19,'score': 70,'tel': '15121445278', 'sex': '女'},
{ 'name': '香香','age': 18,'score': 98,'tel': '15121445275', 'sex': '女'},
{ 'name': '七星','age': 16,'score': 43,'tel': '15121445274', 'sex': '男'},
{ 'name': '八卦','age': 23,'score': 78,'tel': '15121445272', 'sex': '不明'},
]
# a.统计不及格学生的个数
# b.打印不及格学生的名字和对应的成绩
# c.统计未成年学生的个数
count = 0
ag = 0
print('不及格学生的名字和对应的成绩:', end=' ')
for student in all_students:
if student['score'] < 60:
count += 1
print(student['name'],student['score'], end=' ')
if student['age'] < 18:
ag += 1
print()
print('不及格学生的个数:', count)
print('未成年学生的个数:', ag)
# d.打印手机尾号是8的学生的名字
for student in all_students:
if list(student['tel'])[-1] == '8':
print('手机尾号是8的学生的名字:',student['name'])
# e.打印最高分和对应的学生的名字
# 情况1:只有一个最高分
# max1 = all_students[0]
# for student in all_students:
# if student['score'] > max1['score']:
# max1 = student
# print(max1['score'], max1['name'])
# 情况2:有多个最高分
max_score = all_students[0]['score'] # 最大分数
max_student = [all_students[0]['name']] # 最高分对应的学生的名字
for student in all_students[1:]:
if student['score'] == max_score:
# 如果低于默认最高分,最高分就是最高分
max_student.append(student['name'])
elif student['score'] > max_score:
# 如果取出来的大于默认最高分,就把分数更新,把原来列表的名字清除,再加入最高分的姓名
max_score = student['score']
max_student.clear()
max_student.append(student['name'])
print('最高分:{},对应学生:{}'.format(max_score, str(max_student)[1: -1]))
# f.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
# 方法1:高阶函数
# all_students.sort(reverse=True, key=lambda item: item['score'])
# print(all_students)
# 方法2:选择排序
'''
第一轮:获取整个序列中最小值放在第一个位置
第二轮:从第二个位置开始选择第二小的值放在第二位
以此类推...
'''
length = len(all_students)
for index1 in range(length - 1):
for index2 in range(index1+1, length):
if all_students[index2]['score'] > all_students[index1]['score']:
all_students[index1], all_students[index2] = all_students[index2], all_students[index1]
print(all_students)
# g.删除性别不明的所有学生
count = 0
for student in all_students[:]:
if student['sex'] == '不明':
del all_students[count]
count -= 1
count += 1
print(all_students)
3.用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
students1 = {'墨子', '小乔', '上官婉儿', '扁鹊', '诸葛亮', '赵云'}
students2 = {'上官婉儿', '猴子', '赵云', '李白', '凯'}
students3 = {'凯', '墨子', '上官婉儿', '后裔', '猴子', '扁鹊', '赵云'}
# a. 求选课学生总共有多少人
count = 0
all_students = students1 | students2 | students3
for student in all_students:
count += 1
print('选课学生总共有多少人', count)
# b.求只选了第一个学科的人的数量和对应的名字
count = 0
all_students = students1 - students2 - students3
print('只选了第一个学科的学生的名字:', end=' ')
for students in all_students:
count += 1
print(students, end=', ')
print()
print('只选了第一个学科的学生的数量:', count)
# c. 求只选了一门学科的学生的数量和对应的名字
count = 0
all_students = list((students1 - students2 - students3)) + list((students2 - students1 - students3)) + list((students3 - students2 - students1))
print('只选了一门学科的学生的名字:', end=' ')
for students in all_students:
count += 1
print(students, end=', ')
print()
print('只选了一门学科的学生的数量:', count)
# d.求只选了两门学科的学生的数量和对应的名字
count = 0
all_students = list((students1 & students2 - students3)) + list((students1 & students3 - students2)) + list((students3 & students2 - students1))
print('只选了两门学科的学生的名字:', end=' ')
for students in all_students:
count += 1
print(students, end=', ')
print()
print('只选了两门学科的学生的数量:', count)
# e. 求选了三门学生的学生的数量和对应的名字
count = 0
all_students = (students1 & students2 & students3)
print('只选了三门学科的学生的名字:', end=' ')
for students in all_students:
count += 1
print(students, end=', ')
print()
print('只选了三门学科的学生的数量:', count)
网友评论