Day 8-task

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]))

你可能感兴趣的:(Day 8-task)