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,分别为:周五
"""