美文网首页
博学谷第九天

博学谷第九天

作者: namufari | 来源:发表于2020-01-04 02:39 被阅读0次

    时间:2020年1月3日
    内容:学员管理系统,递归函数和匿名函数

    学员管理系统

    需求

    需求:进入系统显示系统功能界面,功能如下:

    • 1、添加学员
    • 2、删除学员
    • 3、修改学员信息
    • 4、查询学员信息
    • 5、显示所有学员信息
    • 6、退出系统

    系统共6个功能,用户根据自己需求选取。

    步骤分析

    1. 显示功能界面

    2. 用户输入功能序号

    3. 根据用户输入的功能序号,执行不同的功能(函数)

      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('输入错误,请重新输入!!!')
    

    递归

    应用场景及特点

    1. 遍历一个文件夹下面的所有文件(实际开发)
    2. 后续的算法基础(例如:快速排序)

    特点:

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

    演练

    # 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)
    

    相关文章

      网友评论

          本文标题:博学谷第九天

          本文链接:https://www.haomeiwen.com/subject/hfqxactx.html