博学谷第九天
2020-01-04 本文已影响0人
namufari
时间:2020年1月3日
内容:学员管理系统,递归函数和匿名函数
学员管理系统
需求
需求:进入系统显示系统功能界面,功能如下:
- 1、添加学员
- 2、删除学员
- 3、修改学员信息
- 4、查询学员信息
- 5、显示所有学员信息
- 6、退出系统
系统共6个功能,用户根据自己需求选取。
步骤分析
-
显示功能界面
-
用户输入功能序号
-
根据用户输入的功能序号,执行不同的功能(函数)
3.1 定义函数
3.2 调用函数
代码
def print_info():
print('-' * 20)
print('欢迎登录学员管理系统')
print('1: 添加学员')
print('2: 删除学员')
print('3: 修改学员信息')
print('4: 查询学员信息')
print('5: 显示所有学员信息')
print('6: 退出系统')
print('-' * 20)
# 学员数据列表
info = []
# 添加学员
def add_info():
""" 添加学员 """
# 接收用户输入学员信息
new_id = input('请输入学号:')
new_name = input('请输入姓名:')
new_tel = input('请输入手机号:')
# 声明info是全局变量
global info
# 检测用户输入的姓名是否存在,存在则报错提示
for i in info:
if new_name == i['name']:
print('该用户已经存在!')
return
# 如果用户输入的姓名不存在,则添加该学员信息
info_dict = {}
# 将用户输入的数据追加到字典
info_dict['id'] = new_id
info_dict['name'] = new_name
info_dict['tel'] = new_tel
# 将这个学员的字典数据追加到列表
info.append(info_dict)
print(info)
# 删除学员
def del_info():
"""删除学员"""
# 1. 用户输入要删除的学员的姓名
del_name = input('请输入要删除的学员的姓名:')
global info
# 2. 判断学员是否存在:如果输入的姓名存在则删除,否则报错提示
for i in info:
if del_name == i['name']:
info.remove(i)
break
else:
print('该学员不存在')
print(info)
# 修改学员信息
def modify_info():
"""修改函数"""
# 1. 用户输入要修改的学员的姓名
modify_name = input('请输入要修改的学员的姓名:')
global info
# 2. 判断学员是否存在:如果输入的姓名存在则修改手机号,否则报错提示
for i in info:
if modify_name == i ['name']:
i['tel'] = input('请输入新的手机号:')
break
else:
print('该学员不存在')
print(info)
# 查询学员
def search_info():
"""查询学员"""
# 1. 输入要查找的学员姓名:
search_name = input('请输入要查找的学员姓名:')
global info
# 2. 判断学员是否存在:如果输入的姓名存在则显示这位学员信息,否则报错提示
for i in info:
if search_name == i['name']:
print('查找到的学员信息如下:----------')
print(f"该学员的学号是{i['id']}, 姓名是{i['name']}, 手机号是{i['tel']}")
break
else:
print('该学员不存在')
# 显示所有学员信息
def print_all():
""" 显示所有学员信息 """
print('学号\t姓名\t手机号')
for i in info:
print(f'{i["id"]}\t{i["name"]}\t{i["tel"]}')
while True:
# 1. 显示功能界面
print_info()
# 2. 用户选择功能
user_num = input('请选择您需要的功能序号:')
# 3. 根据用户选择,执行不同的功能
if user_num == '1':
add_info()
elif user_num == '2':
del_info()
elif user_num == '3':
modify_info()
elif user_num == '4':
search_info()
elif user_num == '5':
print_all()
elif user_num == '6':
exit_flag = input('确定要退出吗?yes or no ')
if exit_flag == 'yes'
break
else:
print('输入错误,请重新输入!!!')
递归
应用场景及特点
- 遍历一个文件夹下面的所有文件(实际开发)
- 后续的算法基础(例如:快速排序)
特点:
- 函数内部自己调用自己
- 必须有出口
演练
# 3 + 2 + 1
def sum_numbers(num):
# 1.如果是1,直接返回1 -- 出口
if num == 1:
return 1
# 2.如果不是1,重复执行累加并返回结果
return num + sum_numbers(num-1)
sum_result = sum_numbers(3)
# 输出结果为6
print(sum_result)
1.png
lambda表达式
应用场景
如果一个函数有一个返回值
,并且只有一句代码
,可以使用lambda简化
。
语法
lambda 参数列表: 表达式
注意
- lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
- lambda表达式能接收任何数量的参数但只能返回一个表达式的值。
# 函数
def fn1():
return 200
print(fn1) # 内存地址
print(fn1()) # 200
# lambda表达式
fn2 = lambda: 100
print(fn2) # 内存地址
print(fn2()) # 100
注意:直接打印lambda表达式,输出的是此lambda的内存地址。
演练:a + b
# 一般函数
def add(a, b):
return a + b
result = add(1, 2)
print(result)
# lambda简化
fn1 = lambda a, b: a + b
print(fn1(1, 2))
lambda的参数形式
无参数
fn1 = lambda: 100
print(fn1())
一个参数
fn1 = lambda a: a
print(fn1('hello world'))
默认参数
fn1 = lambda a, b, c=100: a + b + c
print(fn1(10, 20))
可变参数:*args
fn1 = lambda *args: args
print(fn1(10, 20, 30))
注意:返回值为元组
可变参数:**kwargs
fn1 = lambda **kwargs: kwargs
print(fn1(name='python', age=20))
lambda的应用
带判断的lambda
fn1 = lambda a, b: a if a > b else b
print(fn1(1000, 500))
列表数据按字典key的值排序
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 按name值升序排列
students.sort(key=lambda x: x['name'])
print(students)
# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students)