1.声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话
dict1 = {'name': '小红', 'age': 24, 'score': 98, 'tel': 19992374366}
print(dict1)
2.声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)
a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字
f.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
stu_info_list = [{'name': '小红', 'age': 18, 'score': 98, 'tel': '19992374366'},
{'name': '小明', 'age': 16, 'score': 59, 'tel': '18734631048'},
{'name': '小丽', 'age': 19, 'score': 69, 'tel': '18733746835'},
{'name': '小童', 'age': 15, 'score': 45, 'tel': '18735783659'},
{'name': '小晓', 'age': 18, 'score': 95, 'tel': '18734623448'},
{'name': '小爱', 'age': 17, 'score': 77, 'tel': '18734631345'},
]
a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
flunk_nums = 0
for stu_info_dict in stu_info_list:
if stu_info_dict['score'] < 60:
flunk_nums += 1
print('不及格的学生是:%s ,以及其分数是:%d 分' % (stu_info_dict['name'], stu_info_dict['score']))
print('不及格学生的个数是:%d ' % flunk_nums)
c.统计未成年学生的个数
nonage_nums = 0
for stu_info_dict in stu_info_list:
if stu_info_dict['age'] < 18:
nonage_nums += 1
print('未成年学生的个数是:%d' % nonage_nums)
d.打印手机尾号是8的学生的名字
for stu_info_dict in stu_info_list:
tel = stu_info_dict['tel']
if tel[-1] == '8':
print('%s的手机号是:%s' % (stu_info_dict['name'], tel))
e.打印最高分和对应的学生的名字
max_score = 0
name = []
for stu_info_dict in stu_info_list:
score = stu_info_dict['score']
if score >= max_score:
max_score = score
for stu_info_dict in stu_info_list:
if stu_info_dict['score'] == max_score:
name.append(stu_info_dict['name'])
print('本次%s得到了最高分:%d 分' % (name, max_score))
e.打印最高分和对应的学生的名字
利用选择排序
length = len(stu_info_list)
for i in range(0, length - 1):
for j in range(i + 1, length):
if stu_info_list[j]['score'] > stu_info_list[i]['score']:
stu_info_list[i], stu_info_list[j] = stu_info_list[j], stu_info_list[i]
print(stu_info_list)
补充:
选择排序:让前面的数依次和后面的每一个数比较大小,如果后面的比前面的数大就交换位置(降序)。
整个过程执行长度-1次
nums = [3, 2, 5, 7, 1]
length = len(nums)
# i前面的数的下标
for i in range(0, length -1):
# j 表示前面数后边的每个数的下标
for j in range(i + 1, length):
# 后面的数比前面的大
if nums[j] > nums[i]:
# 交换位置
nums[i], nums[j] = nums[j], nums[i]
print(nums)
3.用三个列表表示三门学科的选课姓名学生(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字
names_list1 = ['name1', 'name2', 'name3', 'name4', 'name5', 'name6']
names_list2 = ['name2', 'name3', 'name4', 'name7', 'name8', 'name9']
names_list3 = ['name1', 'name4', 'name10', 'name2', 'name11', 'name12']
a. 求选课学生总共有多少人
total_stu = names_list1 | names_list2 | names_list3
print('选课学生总共有:%d' % len(total_stu))
b. 求只选了第一个学科的人的数量和对应的名字
first_subject = set(names_list1) - set(names_list2) - set(names_list3)
print('只选了第一个学科的人的数量是:%d 以及相应的名字是:%s' % (len(first_subject), str(first_subject)[1:-1]))
c. 求只选了一门学科的学生的数量和对应的名字
one_subject = set(names_list1) ^ set(names_list2) ^ set(names_list3) - (set(names_list1) & set(names_list2) & set(names_list3))
print('只选了一门学科的学生的数量是:%d 以及相应的名字是:%s' % (len(one_subject), str(one_subject)[1:-1]))
d. 求只选了两门学科的学生的数量和对应的名字
two_subject = total_stu - one_subject - (set(names_list1) & set(names_list2) & set(names_list3))
print('只选了两门学科的学生的数量是:%d 以及对应的名字是:%s' % (len(two_subject), str(two_subject)[1:-1]))
e. 求选了三门学生的学生的数量和对应的名字
three_subject = set(names_list1) & set(names_list2) & set(names_list3)
print('选了三门学生的学生的数量是:%d 以及对应的名字是:%s' % (len(three_subject), str(three_subject)[1:-1]))