Python学习笔记-17

函数加强

应用:学院管理系统

系统介绍

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

  1. 添加学员
  2. 删除学员
  3. 修改学员信息
  4. 查询学员信息
  5. 显示所有学员信息
  6. 退出系统
    系统共6个功能,用户根据自己需求选取。

步骤分析

  1. 显示功能界面
  2. 用户输入功能序号
  3. 根据用户输入的功能序号,执行不同的功能(函数)
    3.1 定义函数
    3.2 调用函数

需求实现

显示功能界面

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

# 定义功能界面函数
def print_info():
    print('-------请选择功能-------')
    print('1. 添加学员')
    print('2. 删除学员')
    print('3. 修改学员信息')
    print('4. 查询学员信息')
    print('5. 显示所有学员信息')
    print('6. 退出系统')
    print('-'*22)

调用代码:

# 1. 显示功能界面
print_info()
用户输入功能序号
# 2. 用户输入功能序号
user_num = int(input('请输入功能序号'))
用户输入的功能序号
# 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('退出系统')
定义不同功能的函数

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

info = []
  1. 添加学员

需求分析:接收用户输入学院信息,并保存;判断是否添加学员信息(如果学员姓名已经存在,则报错提醒;如果学员姓名不存在,则准备空字典,将用户输入的数据追加到字典,再列表追加字典数据);对应的if条件成立的位置调用该函数。

代码实现

# 添加学员
info = []
def add_info():
    '''添加学员'''
    # 输入学院信息
    new_name = input('请输入学员姓名:')
    new_id = input('请输入学员id:')
    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. 删除学员
    需求分析:按用户输入的学员姓名进行删除:用户输入目标学员姓名;检查学员是否存在(如果存在,删除这个数据;如果不存在,则提示“该用户不存在”);对应的if条件成立的位置调用该函数。
    代码实现
# 删除学员
def del_info():
    '''删除学员'''
    # 1. 用户输入想要删除的学员的姓名
    del_name = input('想要删除的学员的姓名:')

    # 2. 在全局变量中的数据中,判断是否有该姓名
    for i in info:
        if del_name == i['name']:
            info.remove(i)
            break

    else:
        print('该学员不存在')    
    print(info)
  1. 修改学员信息
    需求分析:用户输入目标学员姓名;检查这个学员是否存在(如果存在,则修改这位学员的信息,例如手机号;如果不存在,则报错);对应的if条件成立的位置调用该函数。
    代码实现
# 修改学员信息
def modify_info():
    '''修改学员信息'''
    # 1. 用户输入目标学员信息
    modify_name = input('请输入想要修改信息学员的名字:')

    # 2. 在全局变量中,检查这个学员是否存在
    global info
    for i in info:
        if modify_name == i['name']:
            i['tel'] = input('请输入新的手机号:')
            break
        else:
            print('该学员不存在!')
    print(info)
  1. 查询学员信息
    需求分析:用户输入目标学员姓名;检查学员是否存在(如果存在,则显示该学员的信息;如果不存在,则报错提示)
    代码实现
# 查询学员信息
def search_info():
    '''查询学员信息'''
    # 1. 输入想要查询学员的姓名
    search_name = input('请输入想要查询学员的姓名:')

    # 2. 在全局变量中,检查这个学员是否存在
    for i in info:
        if search_name == i['name']:
            print('查找到的学员信息如下:')
            print(f"该学员的姓名是{i['name']},学号是{i['id']},手机号是{i['tel']}")
        else:
            print('该学员不存在!')
  1. 显示所有学员信息
    需求分析:打印所有学员信息
    代码实现
# 显示所有学员信息
def print_all():
    '''显示所有学员信息'''
    print('学号\t姓名\t手机号')
    for i in info:
        print(f'{{i['id']}}\t{i['name']}\t{i['tel']}')
  1. 退出系统
    代码实现
    elif user_num == 6:
        exit_flag = input('确定要退出吗?yes or no')
        if exit_flag == 'yes':
            break

所有功能都用代码实现了,下面,我们来看看完整版的代码吧!

info = []
def print_info():
    print('-------请选择功能-------')
    print('1. 添加学员')
    print('2. 删除学员')
    print('3. 修改学员信息')
    print('4. 查询学员信息')
    print('5. 显示所有学员信息')
    print('6. 退出系统')
    print('-'*22)

# 添加学员
def add_info():
    '''添加学员'''
    # 输入学院信息
    new_name = input('请输入学员姓名:')
    new_id = input('请输入学员id:')
    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('想要删除的学员的姓名:')

    # 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('请输入想要修改信息学员的名字:')

    # 2. 在全局变量中,检查这个学员是否存在
    global info
    for i in info:
        if modify_name == i['name']:
            i['tel'] = input('请输入新的手机号:')
            break
        else:
            print('该学员不存在!')
    print(info)

# 查询学员信息
def search_info():
    '''查询学员信息'''
    # 1. 输入想要查询学员的姓名
    search_name = input('请输入想要查询学员的姓名:')

    # 2. 在全局变量中,检查这个学员是否存在
    for i in info:
        if search_name == i['name']:
            print('查找到的学员信息如下:')
            print(f"该学员的姓名是{i['name']},学号是{i['id']},手机号是{i['tel']}")
        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 = int(input('请输入功能序号'))
 
    # 3. 用户输入的功能序号,执行不同的功能(函数)
    if user_num == 1:
        print('添加学员')
        add_info()
    elif user_num == 2:
        print('删除学员')
        del_info()
    elif user_num == 3:
        print('修改学员信息')
        modify_info()
    elif user_num == 4:
        print('查询学员信息')
        search_info()
    elif user_num == 5:
        print('显示所有学员信息')
        print_all()
    elif user_num == 6:
        exit_flag = input('确定要退出吗?yes or no')
        if exit_flag == 'yes':
            break
    else:
        print('输入功能有错误,请重新输入')

递归

递归的应用场景

递归是一种编程思想:

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

递归的特点

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

应用:3以内数字累加和

代码

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

执行结果

可以使用Debug工具查看
在这里插入图片描述

递归出口问题

错误代码:

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

result = sum_num(3)
print(result) # 6

报错信息

  File "c:\Users\Administrator\Desktop\1.py", line 9, in <module>
    result = sum_num(3)
  File "c:\Users\Administrator\Desktop\1.py", line 7, in sum_num
    return num + sum_num(num-1)
  File "c:\Users\Administrator\Desktop\1.py", line 7, in sum_num
    return num + sum_num(num-1)
  File "c:\Users\Administrator\Desktop\1.py", line 7, in sum_num
    return num + sum_num(num-1)
  [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

其中996是递归深度。

lambda 表达式

lambda的应用场景

如果应该函数有返回值,并且只有一句代码,可以使用lanbda简化。

lambda语法

lambda 参数列表 : 表达式

注意
lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
lambda表达式能接受任何数量的参数但是只能返回一个表达式的值。

快速入门

# 函数
def fn1():
    return 200 
print(fn1) # <function fn1 at 0x00000127864F3E20>
print(fn1()) # 200

# lambda表达式
fn2 = lambda : 100
print(fn2) # <function <lambda> at 0x000001278661E830>
print(fn2()) # 100

注意:直接答应lambda表达式,输出的是此lambda的内存地址。

示例:计算a+b

函数实现

def add(a,b):
    return a+b
result = add(1,2)
print(result) # 3
# 思考:需求简单,是否代码多

lambda实现

fn1 = lambda a,b : a+b
print(fn1(1,2)) # 3

lambda的参数形式

无参数

fn1 = lambda : 100
print(fn1()) # 100

一个参数

fn1 = lambda a : a
print('hallo world') # hallo world

默认参数

fn1 = lambda a,b,c=100:a,b,c
print(fn1(10,20)) # 10,20,100

可变参数 *args

fn1 = lambda *args:args
print(10,20,30) # (10,20,30)

可变参数**kwargs

fn1 = lambda **kwargs : kwargs
print(fn1(name = ‘txd’,age = 18)) # {‘name’: ‘txd’, ‘age’: 18}

lambda 应用

带判断的lambda

fn1 = lambda a,b:a if a > b else b
print(fn1(1,2))

列表书按字典key的值排序

from curses import keyname


studens = [
    {'name':'txd','age':18},
    {'name':'yy','age':19},
    {'name':'ll','age':17}
]

# sort(key = lambda...,....)
# 1. name key 对应的值进行升序排序
studens.sort(key=lambda x:x['name'])
print(studens)
# 2. name key 对应的值进行降序排序
studens.sort(key=lambda x:x['name'],reverse=True)
print(studens)
# 3. age key 对应的值进行升序排序
studens.sort(key=lambda x:x['age'])
print(studens)

高阶函数

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

体验高阶函数

在python中,abs()函数可以完成数字绝对值计算。

abs(-10) # 10

round()函数可以完成对数字的四舍五入计算,

round(1.2) # 1
round(1.9) # 2

需求:任意两个数字,按照指定要求整理数字后进行求和计算。
方法1

def add_num(a,b):
    return abs(a) + abs(b)
result = add_num(-4,2)
print(result)  # 6

方法2

def add_num(a,b,f):
    return f(a) + f(b)
result = add_num(-4,2,abs)
print(result)  # 6

注意:两种表达式对比之后,发现,方法2的代码会更加简洁,函数灵活性更高。

函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。

内置高阶函数

map()

map(func,lst),将传入的函数变量func作用到两三天变量的每个元素中,并将结果组成新的列表返回。
需求:计算list1序列中各个数字的2次方。

lsit1 = [3,4,5]
def func(x):
    return x**2

result = map(func,lsit1)
print(result) # <map object at 0x0000021AB3CFE260>
print(list(result)) # [9, 16, 25]

reduce()

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

注意:reduce()传入的参数func必须接收2个参数。

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

import functools
from unittest import result

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

filter()

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

list1 = [1,2,3,4,5,6,7,8,9]
def func(x):
    return x %2 ==0

result = filter(func,list1)
print(result) # <filter object at 0x000002241A85E260>
print(list(result)) # [2, 4, 6, 8]
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溏心蛋*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值