python零基础-基础阶段05-函数加强(学员管理系统)

文章介绍了如何使用Python构建一个简单的学员管理系统,包括添加、删除、修改和查询学员信息等功能。同时,文章探讨了递归的概念和应用场景,如文件遍历和算法实现,并展示了递归函数的示例。此外,文章还讲解了lambda表达式的使用,包括不同参数形式和在列表排序中的应用。最后,提到了高阶函数的概念,通过实例展示了如何将函数作为参数传递,以及map、reduce和filter等内置高阶函数的使用。
摘要由CSDN通过智能技术生成

@函数加强

一、应用:学员管理系统

1.1 系统简介

需求:进⼊系统显示系统功能界⾯,功能如下:
添加学员
删除学员
修改学员信息
查询学员信息
显示所有学员信息
退出系统
系统共6个功能,⽤户根据⾃⼰需求选取

1.2 步骤分析

  1. 显示功能界⾯
  2. ⽤户输⼊功能序号
  3. 根据⽤户输⼊的功能序号,执⾏不同的功能(函数)
    3.1 定义函数
    3.2 调⽤函数

1.3 需求实现

1.3.1显示功能界面

定义函数print_info,负责显示系统功能

def print_info():   # 定义菜单函数
    print('-' * 20)
    print('欢迎登录学员管理系统')
    print('1: 添加学员')
    print('2: 删除学员')
    print('3: 修改学员信息')
    print('4: 查询学员信息')
    print('5: 显示所有学员信息')
    print('6: 退出系统')
    print('-' * 20)

print_info()  # 调用菜单函数

1.3.2 用户输入序号,选择功能

user_num = input('请选择你需要的功能序号:')

1.3.3 根据用户选的,执行不同的功能

if user_num == '1':
    print('添加学员')
elif user_num == '2':
    print('删除学员')
elif user_num == '3':
 print('修改学员信息')
elif user_num == '4':
 print('查询学员信息')
elif user_num == '5':
 print('显示所有学员信息')
elif user_num == '6':
 print('退出系统')
  1. ⽤户选择系统功能的代码需要循环使⽤,直到⽤户主动退出系统。
  2. 如果⽤户输⼊1-6以外的数字,需要提示⽤户
while True:
    # 1.显示功能界面
    print_info()

    # 用户选择功能
    user_num = input('请选择您需要的功能序号:')

    # 根据用户选择,执行不同的功能
    if user_num == '1':
        print('添加学员')
    elif user_num == '2':
        print('删除学员')
    elif user_num == '3':
        print('修改学员信息')
    elif user_num == '4':
        print('查询学员信息')
    elif user_num == '5':
        print('显示所有学员信息')
    elif user_num == '6':
        print('退出系统')
    else:
        print('输⼊错误,请重新输⼊!!!')

1.3.4 定义不同功能的函数

所有函数都是操作学员信息,所有存储所有学员信息应该是一个全局变量,数据类型为列表

info = []

1.3.4.1 添加学员

需求分析

  1. 接收⽤户输⼊学员信息,并保存
  2. 判断是否添加学员信息
    2.1 如果学员姓名已经存在,则报错提示
    2.2 如果学员姓名不存在,则准备空字典,将⽤户输⼊的数据追加到字典,再列表追加字典数据
  3. 对应的if条件成⽴的位置调⽤该函数
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)

1.3.4.2 删除学员

需求分析
按⽤户输⼊的学员学号进⾏删除

  1. ⽤户输⼊⽬标学员学号
  2. 检查这个学员是否存在
    2.1 如果存在,则列表删除这个数据
    2.2 如果不存在,则报错,并重新输⼊
  3. 对应的if条件成⽴的位置调⽤该函数
def del_info():
    '''删除学员'''
    while True:
        del_id = int(input('请输入要删除的学员学号:'))
        
        global info
        # 检查学员是否存在
        # 如果存在则删除列表指定下标的数据
        if 0 <= del_id <len(info):
            del_flag = input('确定要删除吗?yes or no')
            if del_flag == 'yes':
                del info[del_id]
            print(info)
            # 删除目标学员信息后退出循环
            break
        else:
        print('输入学员有误,请重新输入')

1.3.4.3 修改学员信息

需求分析

  1. ⽤户输⼊⽬标学员学号
  2. 检查这个学员是否存在
    2.1 如果存在,显示此学员信息,并供⽤户输⼊新的信息
    2.2 如果不存在,则报错,并重新输⼊
  3. 对应的if条件成⽴的位置调⽤该函数
def modify_info():
    '''修改学员信息'''
    while True:
        # 用户输入要修改的学员学号
        modify_num = int(input('请输入要修改的学员学号:'))

        global info
        # 检查这个学员是否存在,存在则打印学员信息,并按照用户输入修改

        if 0 <= modify_num <len(info):
            print(f'该学员的学号是{info[modify_num]["id"]},姓名是{info[modify_num]["name"]},手机号是{info[modify_num]["tel"]}')
            info[modify_num]["id"] = input('请输⼊学号:')
            info[modify_num]["name"] = input('请输⼊姓名:')
            info[modify_num]["tel"] = input('请输⼊⼿机号:')
            print(info)
            break
        else:
            print('输入学员有误,请重新输入')

1.3.4.4 查询学员信息

  1. ⽤户输⼊⽬标学员姓名
  2. 检查学员是否存在
    2.1 如果存在,则显示这个学员的信息
    2.2 如果不存在,则报错提示
  3. 对应的if条件成⽴的位置调⽤该函数
def search_info():
 """ 查询学员信息 """
    search_name = input('请输⼊要查找的学员姓名:')
    for i in info:
        if search_name == i['name']:
            print('*** 查询到信息如下 ***')
            print(f'该学员学号是{i["id"]}, 姓名是{i["name"]}, ⼿机号是{i["tel"]}')
            break
    else:
        print('查⽆此⼈......')

1.3.4.5 显示所有学员信息

需求分析
打印所有学员信息

# 显示所有学员信息
def print_all():
 """ 显示所有学员信息 """
    print('学号\t姓名\t⼿机号')
    for i in info:
        print(f'{i["id"]}\t{i["name"]}\t{i["tel"]}')

1.3.4.6 退出系统

在⽤户输⼊功能序号 6 的时候要退出系统,代码如下:

elif user_num == '6':
    exit_flag = input('确定要退出吗?yes or no')
    if exit_flag == 'yes':
        break

二、递归

2.1 递归的应用场景

递归是⼀种编程思想,应⽤场景:

  1. 在我们⽇常开发中,如果要遍历⼀个⽂件夹下⾯所有的⽂件,通常会使⽤递归来实现;
  2. 在后续的算法课程中,很多算法都离不开递归,例如:快速排序。

2.1.1 递归的特点

函数内部自己调用自己
必须有出口

2.2应用:3以内数字累加和

# 3+2+1
def sum_numbers(num):
    # 如果是1,直接返回1 -- 出口
    if num == 1:
        return 1
    # 如果不是1,重复执行累加:
    result = num + sum_numbers(num-1)

    # 返回累加结果
    return result

sum_result = sum_numbers(3)

# 输出结果
print(sum_result)

执行顺序:
在这里插入图片描述

三、lambda表达式

3.1 lambda的应用场景

如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化

3.2 lambda语法

lambda 参数列表 : 表达式
注意:
lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤
lambda函数能接收任何数量的参数但只能返回⼀个表达式的值

快速入门

# 函数
def fn1():
    return 200

print(fn1)
print(fn1())

# lamdba表达式
fn2 = lambda :100
print(fn2)
print(fn2())

执行结果
在这里插入图片描述
注意:直接打印lambda表达式,输出的是此lambda的内存地址

3.3 示例:计算a+b

3.1.1 函数实现

def add(a,b):
    return a + b

result = add(1,2)
print(result)

3.3.2 lambda实现

print((lambda a,b:a + b )(1,2))

3.4 lambda的参数形式

3.4.1 无参数

print((lambda :100)())

3.4.2 一个参数

print((lambda a:a)('hello world'))

3.4.3 默认参数

print((lambda a,b,c=100:a + b + c)(12,20))

3.4.4 可变参数:**args

print((lambda  *args :args)(10,20,30))

注意:这里的可变参数传入到lambda之后,返回值为元组

3.4.5 可变参数:**kwargs

print((lambda **kwargs: kwargs)(name='python', age=20))

3.5 lambda的应用

3.5.1 带判断的lambda

print((lambda a, b: a if a > b else b)(1000, 500)) # 1000

3.5.2 列表数据按字典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)

执行结果:
在这里插入图片描述

四、高阶函数

把函数作为参数传⼊,这样的函数称为⾼阶函数,⾼阶函数是函数式编程的体现。函数式编程就是指这
种⾼度抽象的编程范式

4.1体验高阶函数

需求:⼀个函数完成计算任意两个数字的绝对值之和。
在Python中, abs() 函数可以完成对数字求绝对值计算

abs(-10) # 10

方法1:


```python
def add_num(a, b):
    return abs(a) + abs(b)
result = add_num(-1, 2)
print(result) # 3

方法2

def sum_num(a, b, f):
     return f(a) + f(b)
result = sum_num(-1, 2, abs)
print(result) # 3

函数式编程⼤量使⽤函数,减少了代码的重复,因此程序⽐较短,开发速度较快

4.2 内置高阶函数

4.2.1 map()

map(func, lst),将传⼊的函数变量func作⽤到lst变量的每个元素中,并将结果组成新的列表(Python2)/
迭代器(Python3)返回
需求:计算 list1 序列中各个数字的2次⽅

list1 = [1, 2, 3, 4, 5]
def func(x):
    return x ** 2
result = map(func, list1)
print(result) # <map object at 0x0000016538067358>
print(list(result)) # [1, 4, 9, 16, 25]

4.2.2 reduce()

reduce(func(x,y),lst),其中func必须有两个参数。每次func计算的结果继续和序列的下⼀个元素做累
积计算

注意:reduce()传⼊的参数func必须接受2个参数

需求:计算 list1 序列中各个数字的累加和

import functools
list1 = [1, 2, 3, 4, 5]
def func(a, b):
    return a + b
result = functools.reduce(func, list1)
print(result) # 15

4.2.3 filter()

filter(func, lst)函数⽤于过滤序列, 过滤掉不符合条件的元素, 返回⼀个 filter 对象,。如果要转换为列表,
可以使⽤ list() 来转换

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
    return x % 2 == 0
result = filter(func, list1)
print(result) # <filter object at 0x0000017AF9DC3198>
print(list(result)) # [2, 4, 6, 8, 10]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值