• 2023年最新Python大数据之Python基础【七】管理系统


    7、学生管理系统

    # 需求拆分:
    '''
    1.展示学生管理系统的功能有哪些,引导用户键入序号选择功能
    2.获取用户键入的功能
    3.分析具体要执行哪一项功能
    4.执行功能
    '''
    
    
    def print_all_option():
        """用户功能界面展示"""
        print('-' * 20)
        print('欢迎登录学员管理系统')
        print('1: 添加学员信息')
        print('2: 删除学员信息')
        print('3: 修改学员信息')
        print('4: 查询学员信息')
        print('5: 遍历输出所有学员信息')
        print('6: 退出系统')
        print('-' * 20)
    
    
    def choose_option(num):
        """分析要执行哪一项功能"""
        if num == '1':
            # 添加学员函数
            add_student_info()
        elif num == '2':
            # 删除学员函数
            delete_student_info()
        elif num == '3':
            # 修改学员函数
            modify_student_info()
        elif num == '4':
            # 查询学员函数
            search_student_info()
        elif num == '5':
            # 展示所有学员函数
            show_students_info()
        elif num == '6':
            # 退出程序函数
            exit_program()
        else:
            print('无此选项,请重新输入')
    
    
    def add_student_info():
        """添加学员信息"""
        # 1.用户输入学员信息
        # 1.1当用户输入的id值已经存在时,则不让其继续输入,警告,该id已经存在
        stu_id = input('请输入要添加学员的id:')
        # 获取students_list中所有学员的id值(推导式)
        students_id = [i['id'] for i in students_list]
        # 1.2 比对id是否存在,存在则不允许运行
        if stu_id in students_id:
            print('该id值已经存在,无法添加学员')
        else:
            name = input('请输入要添加学员的姓名:')
            age = input('请输入要添加学员的年龄:')
            mobile = input('请输入要添加学员的手机号:')
            # 2.将学员信息添加到students_list当中
            students_list.append({'id': stu_id, 'name': name, 'age': int(age), 'mobile': mobile})
            print('学员添加完成')
    
    
    def delete_student_info():
        """删除学员信息"""
        # 1.获取要删除学员的id值
        stu_id = input('请输入要删除学员的id:')
        # 2.判断该学员是否存在,如果存在则删除该学员,如果不存在,则提示该学员不存在
        for stu_info in students_list:
            # 判断是否是要删除的学员
            if stu_info['id'] == stu_id:
                # 删除学员并跳出函数
                students_list.remove(stu_info)
                print('该学员已删除')
                return
        else:
            # 执行该命令警告用户没有该学员
            print('该学员不存在,无法删除')
    
    
    def modify_student_info():
        """修改学员信息"""
        # 1.输入要修改的学员的id值
        stu_id = input('请输入您要修改学员的id:')
        # 2.如果学员存在就修改学员信息,如果不存在则进行提示,学员不存在
        for stu_info in students_list:
            if stu_info['id'] == stu_id:
                # 学员信息修改
                name = input('请输入您要修改为的名字:')
                age = input('请输入您要修改为的年龄')
                mobile = input('请输入您要修改为的手机号:')
                stu_info['name'] = name
                stu_info['age'] = age
                stu_info['mobile'] = mobile
                print('学员信息修改完成')
                return
        else:
            print('该学员不存在,修改失败')
    
    
    def search_student_info():
        """查询学员信息"""
        # 1.输入要查询学员的id值
        stu_id = input('请输入要查询学员的id:')
        # 2.判断id值是否存在,如果存在则展示,如果不存在,则警告学员不存在
        for stu_info in students_list:
            if stu_info['id'] == stu_id:
                print(
                    f'学员的学号是:{stu_info["id"]}, 学员的姓名是:{stu_info["name"]}, 学员的年龄是:{stu_info["age"]}, 学员的手机号是:{stu_info["mobile"]}')
                return
        else:
            print('该学员不存在,查询失败')
    
    
    def show_students_info():
        """展示所有学员信息"""
        for stu_info in students_list:
            print(
                f'学员的学号是:{stu_info["id"]}, 学员的姓名是:{stu_info["name"]}, 学员的年龄是:{stu_info["age"]}, 学员的手机号是:{stu_info["mobile"]}'
            )
    
    
    # def exit_program():
    #     # import sys
    #     # # 退出当前程序,结束进程
    #     # sys.exit()
    #     exit()
    
    def exit_program():
        """结束程序"""
        # 通过控制变量结束死循环
        global is_stop
        # 在修改之前需要进行声明 ,修改的变量为全局变量
        is_stop = True
    
    
    # # 展示功能界面
    # print_all_option()
    #
    # # 引导用户输入功能序号,并获取序号
    # option = input('请输入您要执行功能的序号:')
    #
    # # 根据获取的序号分析要执行哪些功能
    # chose_option(option)
    
    
    # 思考:学生管理系统,是不是需要输入6  才能退出 不然就一直询问您要输入的选项
    # 这中情况下建议使用 while True 构造死循环
    
    students_list = [
        {'id': '001', 'name': 'xiaoming', 'age': 18, 'mobile': '13833838338'},
        {'id': '002', 'name': 'xiaohong', 'age': 18, 'mobile': '13900000000'}
    ]
    is_stop = False
    
    while not is_stop:
        # 展示功能界面
        print_all_option()
    
        # 引导用户输入功能序号,并获取序号
        option = input('请输入您要执行功能的序号:')
    
        # 根据获取的序号分析要执行哪些功能
        choose_option(option)
        # 方便展示,显示所有学员信息,开发完成后删除
        # print(students_list)
        input()
    
    # 死循环的退出方式有哪些?
    # break
    # return
    # exit()
    # 控制变量
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176

    8、函数递归

    • 函数内部调用函数本身
    • 函数有明确的递归跳出条件
    • 不超出最大调用深度
    # 函数递归的三个必备条件
    '''
    1/函数体内部,调用函数本身
    2/递归够明确的跳出条件
    3/不能超出最大调用深度
    '''
    
    # 需求:
    '''
    func(1) = 1
    func(2) = 1 + 2 = func(1) + 2
    func(3) = 1 + 2 + 3 = func(2) + 3
    func(4) = 1 + 2 + 3 + 4 = func(3) + 4
    .....
    func(n) = 1 + 2 + 3 .... + n = func(n-1) + n
    '''
    
    # RecursionError: maximum recursion depth exceeded
    # 这种方式无法跳出递归,所以在使用的时候就会无限递归下去
    # def func(n):
    #     return func(n-1) + n
    
    '''
    func(1) = 1
    func(2) = func(1) + 2
    func(3) = func(2) + 3
    func(4) = func(3) + 4
    .....
    func(n) = func(n-1) + n
    '''
    
    def func(n):
        if n == 1:
            return 1
        return func(n-1) + n
    
    
    print(func(999))
    
    
    # Python中默认的最大调用深度,是1000 也就是在Python中函数最多嵌套1000层
    # 最大调用深度是为了保证系统性能的,否则无限递归下去,一会内存就满了
    # 最大调用深度可以调整,可以调整到非常大的数字只要系统性能跟得上
    # RecursionError: maximum recursion depth exceeded in comparison
    
    # 注意事项:
    # 在编程初期,尽量少使用递归,但是要理解递归的特性,别人写的递归函数也要能看懂
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    9、lambda函数

    • 匿名函数,在函数定义时没有函数名
    • 可以用变量保存,在变量之后添加括号即可调用
    # lambda表达式,也叫匿名函数
    # 格式: lambda 参数: 返回值
    
    # 需求: 根据传入的参数返回最大值  使用lambda函数书写
    # 三目运算  :  条件成立时返回的代码 if 条件 else 条件不成立时返回的代码
    max_num = lambda a, b: a if a > b else b
    # 使用变量可以储存lambda函数
    print(max_num(1, 2))
    print(max_num(9, 2))
    
    print(type(max_num))  # 
    
    
    def func():
        print('abc')
    
    
    print(type(func))  # 
    # 通过对数据类型的查看,我们发现lambda和普通函数本质上是一样的,只不过在使用时构造更为简单
    
    # 在使用lambda函数时可以不用变量接收
    print((lambda a, b: a if a > b else b)(3, 4))  # 4
    # 但是不适用变量接收,lambda函数只能使用一次,使用后集被释放,无法再次使用
    
    
    # lambda缺点: 没有办法书写负责的函数,因为其没有函数体,只有返回值,所以返回值后边只能书写一个表达式,lambda可读性极差
    
    
    # 使用lambda完成递归(了解,一般不建议写复杂的代码)
    func1 = lambda n: func1(n - 1) + n if n != 1 else 1
    # RecursionError: maximum recursion depth exceeded
    # 超出最大调用深度,没有明确的递归跳出条件
    print(func1(100))
    
    # lambda应用场景
    # 可以用于一次性函数使用
    # 可以作为函数的参数进行传递
    
    # list  sort(key= )
    # lsit sort排序方法中的key所需要的参数就是一个函数,我们可以传入lambda表示
    
    list1 = [{'a': 1}, {'b': 12}, {'c': 10}]
    # 排序规则:根据字典的第一个键所对应的值进行排序
    
    list1.sort(key=lambda x:list(x.values())[0])
    # 格式: 列表.sort(key = lambda 每次传入的元素: 排序所依据的规则)
    print(list1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    后记

    📢博客主页:https://manor.blog.csdn.net

    📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
    📢本文由 Maynor 原创,首发于 CSDN博客🙉
    📢不能老盯着手机屏幕,要不时地抬起头,看看老板的位置⭐
    📢专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_11947788.html

  • 相关阅读:
    C#中Linq查询使用分组查询
    .NET性能优化-你应该为集合类型设置初始大小
    中医药知识图谱创建与应用辅导资料汇编
    HTML入门基础标签(结构标签,文本标签,特殊字符转义标签,多媒体标签)
    【Qt QML】Qt5.15.2 qml添加自定义控件报错“Xxxx is not a type“
    暴雪与网易宣布停止合作,多家厂商争夺暴雪代理权
    [计算机入门] Windows功能的安装与卸载
    LeetCode234. 回文链表(day0025_1)
    java学习之包
    uniapp实现webview页面关闭功能
  • 原文地址:https://blog.csdn.net/xianyu120/article/details/133769869