# 01.03 作业

``````
all\_students = [

{'name':'stu1', 'age': 19, 'score':81, 'tel':'192222'},

{'name':'stu2', 'age': 29, 'score':90, 'tel':'211222'},

{'name':'stu3', 'age': 12, 'score':67, 'tel':'521114'},

{'name':'stu4', 'age': 30, 'score':45, 'tel':'900012'},

]

``````

1.添加学生：输入学生信息，将输入的学生的信息保存到all_students中

``````

``````
``````while True:
for i in range(4):
name = input('姓名: ')
all_students[i]['name'] = name
age = input('年龄: ')
all_students[i]['age'] = age
score = input('成绩: ')
all_students[i]['score'] = score
tel = input('电话: ')
all_students[i]['tel'] = tel
print('-'*30)
print(all_students)
break

``````

2.按姓名查看学生信息：

``````

``````
``````while True:
name = input('请输入要查询的姓名：')
if name == 'end':
break
for data in all_students:
if name == data['name']:
for key, value in data.items():
print(key, value)
continue
print('未找到学生，请重新输入。')

``````

3.求所有学生的平均成绩和平均年龄

``````sum = 0
for data in all_students:
sum += data['age']
print('平均年龄：',sum / 4)

sum = 0
for data in all_students:
sum += data['score']
print('平均成绩：',sum / 4)

``````

4.删除班级中年龄小于18岁的学生

``````for data in all_students:
if data['age'] < 18:
for key in data:
data[key] = ''
print(all_students)
``````

``````all_students = []
mainmenu = {1: '添加学生', 2:'查看学生', 3: '修改学生信息', 4:'删除学生', 5: '返回'}
submenu_2 = {1: '查看所有学生', 2: '按姓名查找', 3: '按学号查找', 4: '返回'}
submenu_3 = {1: '按姓名修改', 2: '按学号修改', 3: '返回'}
submenu_4 = {1: '删除所有学生', 2: '按姓名删除', 3: '按学号删除', 4: '返回'}

def getNum(text : str) -> str:
while True:
num = input(text)
if len(num) == 4 and num.isdigit():
return num
else:
print('错误，学号为4位数字！请重新输入')

def getName(text : str) -> str:
name = input(text)
return name

def getTel(text : str) -> str:
while True:
tel = input(text)
if len(tel) == 11 and tel.isdigit():
return tel
else:
print('错误，电话号码为11位数字！请重新输入')

def getAge(text : str) -> str:
while True:
age = input(text)
if age.isdigit() and 1 <= len(age) <= 2:
return age
else:
print('年龄不合规范！请输入正确的年龄。')

def matchDataAndOperate(data, value, tag, func):
if all_students == []:
print('=' * 56)
print('目前没有学生！请添加学生。')
print('=' * 56)
elif tag == '':
for data_students in data:
func(data_students, tag, value)
elif tag != '':
for data_students in data:
if value == data_students[tag]:
func(data_students, tag, value)
break
else:
print('没有找到该学生')

def appendStudentData(data, all_students):
all_students.sort(key = lambda x: x['num'])
name = getName('请输入要修改的学生姓名：')
if all_students == []:
num = '0001'
else:
while True:
for data_students in all_students:
if all_students.index(data_students) + 1 < int(data_students['num'][-1]):
num = str(int(data_students['num'][-1]) - int(all_students.index(data_students)) - 1).rjust(4, '0')
break
else:
num = str(len(all_students) + 1).rjust(4, '0')
break
age = getAge('请输入要修改的学生年龄：')
tel = getTel('请输入要修改的学生电话：')
data['name'] = name
data['num'] = num
data['tel'] = tel
data['age'] = age
print('添加完成')
showStudentData(data)
return data

def changeStudentData(data, tag = None, value = None):
if tag == 'num':
print('修改学号：%s同学的信息' % value)
elif tag == 'name':
print('修改姓名：%s同学的信息' % value)
ifchangeage = input('是否更改年龄？[y/n]')
if ifchangeage == 'y':
age = getAge('请输入修改后的学生年龄：')
elif ifchangeage == 'n':
age = data['age']
ifchangetel = input('是否更改电话号码？[y/n]')
if ifchangetel == 'y':
tel = getTel('请输入修改后的学生电话号码：')
elif ifchangetel == 'n':
tel = data['tel']
data['tel'] = tel
data['age'] = age
print('修改完成')
showStudentData(data)

def showStudentData(data, tag = None, value = None):
print('学生%s的信息如下：' % data['name'])
print(' ')
print('学号:', data['num'].ljust(5, ' '), end = '')
print('学生:', data['name'].ljust(8, ' '), end = '')
print('年龄:', data['age'].ljust(5, ' '), end = '')
print('电话:', data['tel'].ljust(11, ' '), end = '')
print('')
print('=' * 56)

def delStudentData(data, tag = None, value = None):
all_students.remove(data)
print('删除成功')

print('=' * 36)
print(chr(0x1f338) * 2, '欢迎：')
print('')
print('')
print(chr(0x1f537) * 2, '%d.\t%s' % (key, value))
print('')
print('=' * 36)
choice = input('请选择(1-5)：')
return choice

print(key,'. ',value)
choice = input('请选择：')
print(' ')
return choice

def choiceExitorNot(funcname) -> str:
print('1. 继续%s\n2. 返回主菜单' % funcname)
cmd = input('请选择(1-2): ')
return cmd

def endTips():
print('=' * 36)
print('请根据提示进行选择。')
print('=' * 36)

while True:
if choice == '1':
while True:
data_students = {'num': '','name':'', 'age': '', 'tel':''}
data = appendStudentData(data_students, all_students)
all_students.append(data)
cmd = choiceExitorNot('添加')
if cmd == '1':
continue
else:
break
elif choice == '2':
all_students.sort(key = lambda x: x['num'])
while True:
if choice_2 == '1':
matchDataAndOperate(all_students, '', '',showStudentData)
elif choice_2 == '2':
name = getName('请输入要查找的学生姓名：')
matchDataAndOperate(all_students, name, 'name', showStudentData)
elif choice_2 == '3':
num = getNum('请输入要查询的学生学号：')
print(' ')
matchDataAndOperate(all_students, num, 'num', showStudentData)
elif choice_2 == '4':
break
else:
endTips()
continue
elif choice == '3':
while True:
if choice_3 == '1':
name = getName('请输入要修改的学生姓名：')
print(' ')
matchDataAndOperate(all_students, name, 'name', changeStudentData)
cmd = choiceExitorNot('修改')
if cmd == '1':
continue
else:
break
elif choice_3 == '2':
num = getNum('请输入要修改的学生学号：')
print(' ')
matchDataAndOperate(all_students, num, 'num', changeStudentData)
cmd = choiceExitorNot('修改')
if cmd == '1':
continue
else:
break
elif choice_3 == '3':
break
else:
endTips()
continue
elif choice == '4':
while True:
if choice_4 == '1':
for data in all_students[:]:
delStudentData(data)
print('返回主菜单。')
break
elif choice_4 == '2':
name = getName('请输入要删除的学生姓名：')
print(' ')
matchDataAndOperate(all_students, name, 'name', delStudentData)
cmd = choiceExitorNot('删除')
if cmd == '1':
continue
else:
break
elif choice_4 == '3':
num = getNum('请输入要删除的学生学号：')
print(' ')
matchDataAndOperate(all_students, num, 'num', delStudentData)
cmd = choiceExitorNot('删除')
if cmd == '1':
continue
else:
break
elif choice_4 == '4':
break
else:
endTips()
continue
elif choice == '5':
cmd = choiceExitorNot('退出')
if cmd == '1':
print('退出')
break
else:
continue
else:
endTips()
continue
``````

• 序言：七十年代末，一起剥皮案震惊了整个滨河市，随后出现的几起案子，更是在滨河造成了极大的恐慌，老刑警刘岩，带你破解...
沈念sama阅读 77,640评论 1 169
• 序言：滨河连续发生了三起死亡事件，死亡现场离奇诡异，居然都是意外死亡，警方通过查阅死者的电脑和手机，发现死者居然都...
沈念sama阅读 26,109评论 1 142
• 文/潘晓璐 我一进店门，熙熙楼的掌柜王于贵愁眉苦脸地迎上来，“玉大人，你说我怎么就摊上这事。” “怎么了？”我有些...
开封第一讲书人阅读 29,070评论 0 100
• 文/不坏的土叔 我叫张陵，是天一观的道长。 经常有香客问我，道长，这世上最难降的妖魔是什么？ 我笑而不...
开封第一讲书人阅读 16,169评论 0 86
• 正文 为了忘掉前任，我火速办了婚礼，结果婚礼上，老公的妹妹穿的比我还像新娘。我一直安慰自己，他们只是感情好，可当我...
茶点故事阅读 21,395评论 0 144
• 文/花漫 我一把揭开白布。 她就那样静静地躺着，像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上，一...
开封第一讲书人阅读 17,620评论 0 87
• 那天，我揣着相机与录音，去河边找鬼。 笑死，一个胖子当着我的面吹牛，可吹牛的内容都是我干的。 我是一名探鬼主播，决...
沈念sama阅读 10,426评论 2 161
• 文/苍兰香墨 我猛地睁开眼，长吁一口气：“原来是场噩梦啊……” “哼！你这毒妇竟也来了？” 一声冷哼从身侧响起，我...
开封第一讲书人阅读 9,829评论 0 77
• 想象着我的养父在大火中拼命挣扎，窒息，最后皮肤化为焦炭。我心中就已经是抑制不住地欢快，这就叫做以其人之道，还治其人...
爱写小说的胖达阅读 8,349评论 5 111
• 序言：老挝万荣一对情侣失踪，失踪者是张志新（化名）和其女友刘颖，没想到半个月后，有当地人在树林里发现了一具尸体，经...
沈念sama阅读 11,609评论 0 128
• 正文 独居荒郊野岭守林人离奇死亡，尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
茶点故事阅读 10,379评论 1 124
• 正文 我和宋清朗相恋三年，在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
茶点故事阅读 11,185评论 0 127
• 白月光回国，霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前， 不然我有一百种方法让你生不如死。]我...
爱写小说的胖达阅读 6,045评论 0 17
• 序言：一个原本活蹦乱跳的男人离奇死亡，死状恐怖，灵堂内的尸体忽然破棺而出，到底是诈尸还是另有隐情，我是刑警宁泽，带...
沈念sama阅读 8,842评论 2 114
• 正文 年R本政府宣布，位于F岛的核电站，受9级特大地震影响，放射性物质发生泄漏。R本人自食恶果不足惜，却给世界环境...
茶点故事阅读 11,917评论 3 121
• 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹，春花似锦、人声如沸。这庄子的主人今日做“春日...
开封第一讲书人阅读 7,691评论 0 3
• 文/苍兰香墨 我抬头看了看天上的太阳。三九已至，却和暖如春，着一层夹袄步出监牢的瞬间，已是汗流浃背。 一阵脚步声响...
开封第一讲书人阅读 7,903评论 0 76
• 我被黑心中介骗来泰国打工， 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留，地道东北人。 一个月前我还...
沈念sama阅读 12,353评论 2 132
• 正文 我出身青楼，却偏偏与公主长得像，于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子，可洞房花烛夜当晚...
茶点故事阅读 13,030评论 2 130

### 推荐阅读更多精彩内容

• 8月22日-----字符串相关 2-3 个性化消息: 将用户的姓名存到一个变量中，并向该用户显示一条消息。显示的消...
future_d180阅读 743评论 0 1
• 1.使用位运算判断一个数是否是奇数。 2.表达式0x13&0x17的值是（19 ） 3.若x=-20,y=3则x&...
生命的怒放阅读 205评论 0 0
• 1.使用位运算判断一个数是否是奇数 2.表达式0x13&0x17的值是（19） 0x13 转换为十进制： 1 * ...
百而所思阅读 410评论 0 0
• 孩子们，学会靠自己学好习，学会对你有好处的，孩子只有靠自己才能学好习，学会坚强靠自己，才是孩子真本事上好学，别老靠...
倪萍小芳阅读 737评论 0 0
• 鲸鱼喜欢看电影，有不错的新片上映会去电影院看，有时会叫朋友一起。好友A每次不去，总说我好浪费，明明网上有免费资...
鲸鱼我爱你阅读 109评论 2 1