April 24th_day08_homework

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

qusetion2.声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)

a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字
f.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

g = (x for x in range(1, 10000))
dic_of_stu_message = {}


# 学生信息函数
def student_information():
    print('=============================')
    print('\t欢迎XXX')
    print('')
    print('\t1.  添加学生')
    print('\t⚽️2.  查看学生')
    print('\t️3.  修改学生信息')
    print('\t️4.  删除学生')
    print('\t️5.  返回')
    print('=============================')
    return input('请选择(1-5):')


# 添加学生函数
def add_student():
    while True:
        stu_num = 'python1902' + str(next(g)).zfill(4)
        stu_id = stu_num
        name = input('请输入学生姓名:')
        age = int(input('请输入学生年龄:'))
        grade = int(input('请输入学生成绩:'))
        cellphone = input('请输入学生电话:')
        dic_of_stu_message[stu_num] = {'stu_id': stu_id,
                                       'name': name,
                                       'age': age,
                                       'grade': grade,
                                       'cellphone': cellphone
                                       }
        print('学生工号为:%s\t姓名:%s\t年龄:%d\t成绩:%d\t电话:%s' % (dic_of_stu_message[stu_num]['stu_id'],
                                                        dic_of_stu_message[stu_num]['name'],
                                                        dic_of_stu_message[stu_num]['age'],
                                                        dic_of_stu_message[stu_num]['grade'],
                                                        dic_of_stu_message[stu_num]['cellphone'])
              )
        print('添加成功!')
        choice = input('是否继续添加学生信息(yes/no):')
        if choice.lower() == 'no':
            break


# 查询学生函数
def check_student():
    print('=============================')
    print('\t1.查看所有学生')
    print('\t2.按姓名查找')
    print('\t3.按学号查找')
    print('\t4.返回')
    return input('请选择(1-4):')


# 冒泡排序(列表中字典-按成绩排序)
def bubble_sort(lis):
    length = len(lis)
    for i in range(length):
        for j in range(i+1, length):
            if lis[i]['grade'] < lis[j]['grade']:
                lis[i], lis[j] = lis[j], lis[i]
    return lis


# 主程序
while True:
    temp1 = student_information()
    if temp1 == '1':
        add_student()
        continue
    elif temp1 == '2':
        temp2 = check_student()
        if temp2 == '4':
            continue
    elif temp1 == '5':
        break

# 创建学生信息列表lis_students
lis_students = []
for key in dic_of_stu_message:
    lis_students.append(dic_of_stu_message[key])
print(lis_students)

# 打印学生信息列表lis_students
print('学生信息列表为:')
for index in range(len(lis_students)):
    print('学生工号为:%s\t姓名:%s\t年龄:%d\t成绩:%d\t电话:%s' % (lis_students[index]['stu_id'],
                                                    lis_students[index]['name'],
                                                    lis_students[index]['age'],
                                                    lis_students[index]['grade'],
                                                    lis_students[index]['cellphone'])
          )

"""
列表lis_off_grades中储存不及格学生学号
列表lis_minors中储存未成年学生学号
列表lis_end_cellphones中储存手机尾号为8的学生学号
"""
lis_off_grades = []
lis_minors = []
lis_end_cellphones = []
for index in range(len(lis_students)):
    if lis_students[index]['grade'] < 60:
        lis_off_grades.append(lis_students[index]['stu_id'])
    if lis_students[index]['age'] < 18:
        lis_minors.append(lis_students[index]['stu_id'])
    if lis_students[index]['cellphone'][-1] == '8':
        lis_end_cellphones.append(lis_students[index]['stu_id'])

print('a.不及格学生个数为:%d' % len(lis_off_grades))  # 打印不及格学生个数

# 打印不及格学生信息
print('b.不及格学生信息:')
for index in lis_off_grades:
    print('\t姓名:%s\t成绩:%d' % (dic_of_stu_message[index]['name'], dic_of_stu_message[index]['grade']))
print('c.未成年学生个数为:%d' % len(lis_minors))  # 打印未成年学生个数

# 打印手机尾号为8的学生信息
print('d.手机尾号为8的学生信息:')
for index in lis_end_cellphones:
    print('\t姓名:%s\t成绩:%s' % (dic_of_stu_message[index]['name'], dic_of_stu_message[index]['cellphone']))

bubble_sort(lis_students)  # 列表按学生成绩排序

# 求最高分有几人
lis_sum_grade = []
for index in range(len(lis_students)):
    lis_sum_grade.append(lis_students[index]['grade'])
count_high_grade = lis_sum_grade.count(lis_students[0]['grade'])

# 打印最高分学生信息
print('e.最高分学生信息:')
for index in range(count_high_grade):
    print('\t姓名:%s\t成绩:%d' % (lis_students[index]['name'], lis_students[index]['grade']))

# 打印排序后列表
print('f.按学生成绩从大到小排序后为:')
for index in range(len(lis_students)):
    print('学生工号为:%s\t姓名:%s\t年龄:%d\t成绩:%d\t电话:%s' % (lis_students[index]['stu_id'],
                                                    lis_students[index]['name'],
                                                    lis_students[index]['age'],
                                                    lis_students[index]['grade'],
                                                    lis_students[index]['cellphone'])
          )
print('======finish=======')

"""
=============================
    欢迎XXX

    1.  添加学生
    ⚽️2.  查看学生
    ️3.  修改学生信息
    ️4.  删除学生
    ️5.  返回
=============================
请选择(1-5):1
请输入学生姓名:张一
请输入学生年龄:27
请输入学生成绩:87
请输入学生电话:13000000008
学生工号为:python19020001    姓名:张一   年龄:27   成绩:87   电话:13000000008
添加成功!
是否继续添加学生信息(yes/no):yes
请输入学生姓名:赵二
请输入学生年龄:17
请输入学生成绩:90
请输入学生电话:13000000001
学生工号为:python19020002    姓名:赵二   年龄:17   成绩:90   电话:13000000001
添加成功!
是否继续添加学生信息(yes/no):yes
请输入学生姓名:钱三
请输入学生年龄:22
请输入学生成绩:55
请输入学生电话:13500000008
学生工号为:python19020003    姓名:钱三   年龄:22   成绩:55   电话:13500000008
添加成功!
是否继续添加学生信息(yes/no):yes
请输入学生姓名:孙四
请输入学生年龄:18
请输入学生成绩:90
请输入学生电话:13000000003
学生工号为:python19020004    姓名:孙四   年龄:18   成绩:90   电话:13000000003
添加成功!
是否继续添加学生信息(yes/no):yes
请输入学生姓名:李五
请输入学生年龄:15
请输入学生成绩:46
请输入学生电话:13000000007
学生工号为:python19020005    姓名:李五   年龄:15   成绩:46   电话:13000000007
添加成功!
是否继续添加学生信息(yes/no):yes
请输入学生姓名:周六
请输入学生年龄:30
请输入学生成绩:77
请输入学生电话:13600005008
学生工号为:python19020006    姓名:周六   年龄:30   成绩:77   电话:13600005008
添加成功!
是否继续添加学生信息(yes/no):no
=============================
    欢迎XXX

    1.  添加学生
    ⚽️2.  查看学生
    ️3.  修改学生信息
    ️4.  删除学生
    ️5.  返回
=============================
请选择(1-5):5
[{'stu_id': 'python19020001', 'name': '张一', 'age': 27, 'grade': 87, 'cellphone': '13000000008'}, {'stu_id': 'python19020002', 'name': '赵二', 'age': 17, 'grade': 90, 'cellphone': '13000000001'}, {'stu_id': 'python19020003', 'name': '钱三', 'age': 22, 'grade': 55, 'cellphone': '13500000008'}, {'stu_id': 'python19020004', 'name': '孙四', 'age': 18, 'grade': 90, 'cellphone': '13000000003'}, {'stu_id': 'python19020005', 'name': '李五', 'age': 15, 'grade': 46, 'cellphone': '13000000007'}, {'stu_id': 'python19020006', 'name': '周六', 'age': 30, 'grade': 77, 'cellphone': '13600005008'}]
学生信息列表为:
学生工号为:python19020001    姓名:张一   年龄:27   成绩:87   电话:13000000008
学生工号为:python19020002    姓名:赵二   年龄:17   成绩:90   电话:13000000001
学生工号为:python19020003    姓名:钱三   年龄:22   成绩:55   电话:13500000008
学生工号为:python19020004    姓名:孙四   年龄:18   成绩:90   电话:13000000003
学生工号为:python19020005    姓名:李五   年龄:15   成绩:46   电话:13000000007
学生工号为:python19020006    姓名:周六   年龄:30   成绩:77   电话:13600005008
a.不及格学生个数为:2
b.不及格学生信息:
    姓名:钱三   成绩:55
    姓名:李五   成绩:46
c.未成年学生个数为:2
d.手机尾号为8的学生信息:
    姓名:张一   成绩:13000000008
    姓名:钱三   成绩:13500000008
    姓名:周六   成绩:13600005008
e.最高分学生信息:
    姓名:赵二   成绩:90
    姓名:孙四   成绩:90
f.按学生成绩从大到小排序后为:
学生工号为:python19020002    姓名:赵二   年龄:17   成绩:90   电话:13000000001
学生工号为:python19020004    姓名:孙四   年龄:18   成绩:90   电话:13000000003
学生工号为:python19020001    姓名:张一   年龄:27   成绩:87   电话:13000000008
学生工号为:python19020006    姓名:周六   年龄:30   成绩:77   电话:13600005008
学生工号为:python19020003    姓名:钱三   年龄:22   成绩:55   电话:13500000008
学生工号为:python19020005    姓名:李五   年龄:15   成绩:46   电话:13000000007
======finish=======
"""

question3.用三个列表表示三门学科的选课学生姓名(一个学生可以同时选多门课)

a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字

sociology = ['赵一', '钱二', '孙三', '李四', '周五']
philosophy = ['孙三', '李四', '周五', '吴六', '郑七']
psychology = ['周五', '吴六', '郑七', '王八']
# 打印选择社会学的学生
print('选择社会学的学生有:', end=' ')
for value in sociology:
    print(value, end=" ")
print('')

# 打印选择哲学的学生
print('选择哲学的学生有:', end=' ')
for value in philosophy:
    print(value, end=" ")
print('')

# 打印选择心理学的学生
print('选择心理学的学生有:', end=' ')
for value in psychology:
    print(value, end=" ")
print('')
print('==========================================')

print('a.选课学生总人数为:', len(set(sociology) | set(philosophy) | set(psychology)))

only_sociology = set(sociology) - set(philosophy) - set(psychology)
print('b.只选了社会学的学生人数为%d,分别为:' % len(only_sociology), end='')
for value in only_sociology:
    print(value, end=' ')
print('')

only_one_subject = (set(sociology) ^ set(philosophy)) - set(psychology)
print('c.只选了一科的学生人数为%d,分别为:' % len(only_one_subject), end='')
for value in only_one_subject:
    print(value, end=' ')
print('')

all_subject = set(sociology) & set(philosophy) & set(psychology)
only_two_subject = ((set(sociology) & set(philosophy)) | (set(philosophy) & set(psychology))) - all_subject

print('d.只选了两科的学生人数为%d,分别为:' % len(only_two_subject), end='')
for value in only_two_subject:
    print(value, end=' ')
print('')

print('e.三科全选的学生人数为%d,分别为:' % len(all_subject), end='')
for value in all_subject:
    print(value, end=' ')
print('')
"""
选择社会学的学生有: 赵一 钱二 孙三 李四 周五 
选择哲学的学生有: 孙三 李四 周五 吴六 郑七 
选择心理学的学生有: 周五 吴六 郑七 王八 
==========================================
a.选课学生总人数为: 8
b.只选了社会学的学生人数为2,分别为:赵一 钱二 
c.只选了一科的学生人数为2,分别为:赵一 钱二 
d.只选了两科的学生人数为4,分别为:郑七 李四 孙三 吴六 
e.三科全选的学生人数为1,分别为:周五
"""

你可能感兴趣的:(April 24th_day08_homework)