Python零基础自学5(黑马)

视频链接:https://www.bilibili.com/video/BV1o4411M71o?p=15&share_source=copy_web
课件PDF–链接: https://pan.baidu.com/s/1kYX3FcDasnFMLT8FCuHIGw 提取码: 86hy
以下均为个人笔记

函数加强

一、应用:学员管理系统

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()
 
	 # 2. ⽤户选择功能
	 user_num = 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('退出系统')
	 else:
		 print('输⼊错误,请重新输⼊!!!')
1.3.4 定义不同功能的函数

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

info = []
1.3.4.1 添加学员

需求分析

  1. 接收⽤户输⼊学员信息,并保存
  2. 判断是否添加学员信息
    2.1 如果学员姓名已经存在,则报错提示
    2.2 如果学员姓名不存在,则准备空字典,将⽤户输⼊的数据追加到字典,再列表追加字典数据
  3. 对应的if条件成⽴的位置调⽤该函数
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
# 定义功能界面函数
def info_print():
    print('请选择功能------')
    print('1、添加学员')
    print('2、删除学员')
    print('3、修改学员')
    print('4、查询学员')
    print('5、显示所有学员')
    print('6、退出系统')
    print('--'*10)

# 等待存储所有学员信息
info = []

# 添加学员信息的函数
def add_info():
    """添加学员函数"""
    # 1.用户输入:姓名、学号、联系方式
    new_id = input('请输入学号: ')
    new_name = input('请输入姓名: ')
    new_tel = input('请输入电话: ')

    # 2.判断是否添加这个学员:如果学员姓名已经存在报错提示;如果姓名不存在添加数据
    global info
    # 2.1 不允许姓名重复:判断用户输入的姓名 和 列表里面字典的name对应的值 相等 提示
    for i in info:
        if new_name == i['name']:
            print('此用户名已存在')
            # 此时return作用:退出当前函数,后面添加信息的代码不执行
            return

    # 2.2 如果输入的姓名不存在,则添加数据;准备空字典,字典新增数据,列表追加字典
    info_dict = {}

    # 字典新增数据
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    # print(info_dict)

    # 列表追加字典
    info.append(info_dict)
    print(info)

# 删除学员
def del_info():
    """删除学员"""
    # 1.用户输入要删除的学员的姓名
    del_name = input('请输入要删除学院的姓名: ')

    # 2.判断学员是否存在:存在则删除;不存在提示
    # 2.1声明info是全局变量
    global info
    # 2.2遍历列表
    for i in info:
        # 2.3判断学员是否存在,存在执行删除(列表里面的字典),break,这个系统不允许重名,删除了一个后面的不需要遍历
        if del_name == i['name']:
            # 列表删除数据 -- 按数据删除remove
            info.remove(i)
            break
    else:
        print('该学员不存在')

    print(info)

# 修改函数
def modify_info():
    """修改函数"""
    # 1.用户输入要修改学员的姓名
    modify_name = input('请输入要修改的学员的姓名: ')
    # 2.判断学员是否存在:存在修改手机号;不存在,提示
    # 2.1声明info是全局
    global info
    # 2.2遍历列表,判断输入的姓名 == 字典['name']
    for i in info:
        if modify_name == i['name']:
            # 将tel这个key修改值,并终止次循环
            i['tel'] = input('请输入新的手机号: ')
            break
    else:
        # 学员不存在
        print('该学员不存在')
    # 3.打印info
    print(info)

# 查询学员
def search_info():
    """查询学员"""
    # 1.用户输入目标学员姓名
    search_name = input('请输入要查询的学员的姓名: ')

    # 2.检查学员是否存在:存在打印这个学员的信息;不存在则提示
    # 2.1声明info为全局
    global info
    # 2.2遍历info,判断输入的学员是否存在
    for i in info:
        if search_name == i['name']:
            # 学员存在
            print('查询到的学员信息为--------')
            print(f"学员的学号为{i['id']},姓名为{i['name']},手机号为{i['tel']}")
            break

        # 如果不存在,则提示
        else:
            print('您查询的学员不存在----')

# 显示所有学员信息
def print_all():
    """显示所有学员信息"""
    # 1.打印提示字
    print('学号\t姓名\t手机号')
    # 2.打印所有学员的数据
    for i in info:
        print(f"{i['id']}\t{i['name']}\t {i['tel']}")

# 系统功能需循环使用,直到用户输入6,才退出系统
while True:
    # 1.显示功能界面
    info_print()

    # 2.用户输入功能序号
    user_num = int(input('请输入功能序号:'))

    # 3.按照用户输入的功能序号,执行不同的功能(函数)
    # 如果用户输入1.执行添加;如果用户输入2.执行删除...--多重判断】
    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:
        # print('退出系统')
        # 程序要想结束,退出终止while True -- break
        exit_flag = input('确定要退出吗? yes or no')
        if exit_flag == 'yes':
            break
    else:
        print('您输入的有误,请重新输入')

二、递归

2.1递归的特点

函数内部⾃⼰调⽤⾃⼰
必须有出⼝

2.2 应⽤:3以内数字累加和
# 3 + 2 + 1
def sum_numbers(num):
	# 1.如果是1,直接返回1 -- 出⼝
	 if num == 1:
 		return 1
 		
 	# 2.如果不是1,重复执⾏累加:
 	result = num + sum_numbers(num-1)
 	
	# 3.返回累加结果
 	return result
 	
sum_result = sum_numbers(3)
# 输出结果为6
print(sum_result)

在这里插入图片描述

三、lambda 表达式

3.1 lambda的应⽤场景

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

3.2 lambda语法
lambda 参数列表 : 表达式

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

# 需求:函数  返回值 100
#1.函数
def fn1():
    return 100

result = fn1()
print(result)#100

# 2.lambda 匿名函数
# lambda 参数列表:表达式
fn2 = lambda: 100
print(fn2)  # lambda 内存地址

# 100返回值 调用函数
print(fn2()) #100

# lambda 简化代码
# 注意:lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用
#      lambda表达式能接受任何数量的参数但 只能返回一个表达式的值
#      直接打印lambda表达式,输出的是次lambda的内存地址
#      如果函数有一个返回值,并且只有一句代码,可以使用lambda简化

注意:直接打印lambda表达式,输出的是此lambda的内存地址

3.3 示例:计算a + b
3.3.1 函数实现
# 需求 :计算a + b

# 1.函数
def add(a,b):
    return a + b

result = add(1,2)
print(result)#
# 2.lambda实现
fn1 = lambda a, b: a+b
print(fn1(1,2))#3

思考:需求简单,是否代码多?

3.3.2 lambda实现
print((lambda a, b: a + b)(1, 2))
3.4 lambda的参数形式
# 1.无参数
fn1 = lambda:100
print(fn1())#100

# 2.一个参数
fn2 = lambda a: a
print(fn2('hello world'))#hello world

# 3.默认参数
fn3 = lambda  a , b , c = 100 :a + b + c
print(fn3(10,20,30))#60
print(fn3(10,20))   #130=10+20+100

# 4.可变参数:*args--返回的是元祖
fn4 = lambda *args : args#参数:返回类型(元组)
print(fn4(10,20,30,40))#(10, 20, 30, 40)
print(fn4(10,20,))     #(10, 20)
print(fn4(10))         #(10,)

# 5.可变参数:**kwargs--返回是字典
fn5 = lambda **kwargs : kwargs
print(fn5())                #{}
print(fn5(name = 'python')) #{'name': 'python'}
print(fn5(name = 'python',age = 18))#{'name': 'python', 'age': 18}
3.5 lambda的应⽤
3.5.1. 带判断的lambda
fn1 = lambda a ,b :a if a > b else b
print(fn1(11,200))#200
print(fn1(1001,200))#1001
3.5.2. 列表数据按字典key的值排序
students = [ {'name' : 'TOM', 'age' : 20},
    {'name' : 'ROSE', 'age' : 19},
    {'name' : 'Jack', 'age' : 22}]

# sort(key = lambda..., reverse = bool数据)
# 1.name key对应的值进行升序排序
students.sort(key = lambda x : x['name'])
print(students)
#[{'name': 'Jack', 'age': 22}, {'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}]
# 2.name key对应的值进行降序排序
students.sort(key = lambda x : x['name'],reverse = True )
print(students)
#[{'name': 'TOM', 'age': 20}, {'name': 'ROSE', 'age': 19}, {'name': 'Jack', 'age': 22}]
# 3.age  key对应的值进行降排排序
students.sort(key = lambda x : x['age'])
print(students)
#[{'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}, {'name': 'Jack', 'age': 22}]

四、高阶函数

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

4.1体验高阶函数

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

# abs():绝对值
print(abs(-10))#10

# round():四舍五入
print(round(0.3))#0
print(round(1.5))#2
# 需求:任意两个数字,先进行数字处理(绝对值或四舍五入)在求和计算

# 1.写法一
def add_num(a,b):
    return abs(a) + abs(b)
result = add_num(-5,2)
print(result)#7

# 2.写法二:高阶函数  f是第三个参数,用来接收将来传入的函数
def sum_num(a,b,f):
    return f(a) + f(b)
result1 = sum_num(-2,-6,abs)
print(result1)#8

result2 = sum_num(2.3,6.6,round)
print(result2)#9
4.2内置高阶函数
4.2.1 map()

map(func, lst),将传⼊的函数变量func作⽤到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。

# 需求:计算list1序列中各个数字的2次方
# 1.准备列表数据
list1 = [1,2,3,4,5]

# 2.准备2次方计算的函数
def func(x):
    return x**2

# 3.调用map
result = map(func,list1)

# 4.验收成果
print(result)#地址<map object at 0x0000024B7D23F9A0>
print(list(result))#[1, 4, 9, 16, 25]
4.2.2 reduce()

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

list1 = [1,2,3,4,5]

# 1.导入模块
import functools

# 2.定义功能函数
def func(a,b):
    return a + b

# 3.调用reduce。作用:功能函数计算的结果和序列的下一个数据做累计计算
result = functools.reduce(func,list1)
print(result)#15
4.2.3 filter()

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

# 如果要转换为列表,可以使用list()来转换

list1 = [1,2,3,4,5,6,7,8,9,10]

# 1.定义功能函数:过滤序列中的偶数
def func(x):
    return x % 2 == 0

# 2.调用filter
result = filter(func,list1)
print(result)#<filter object at 0x00000230F451F9A0>
print(list(result))#[2, 4, 6, 8, 10]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值