作业回顾
'''
1、使用递归实现斐波那契数列
0 1 1 2 3 5 8 13 21 ...
第一个条件
1、必须要有出口
2、必须自己调用自己
'''
def fib_func(n):
# 初始值设置 如果n是0或者1 则直接返回本身
if n in (0, 1):
# 只要执行return 本次函数调用就终止
return n
return fib_func(n-2) + fib_func(n-1)
# 传递一个数 然后就是打印前几位
for i in range(10):
print(fib_func(+i), end=' ')
'''
分析:
fib_func(0) = 0
fib_func(1) = 1
fib_func(2) = fib_func(0) + fib_func(1) = 0 + 1 = 1
fib_func(3) = fib_func(1) + fib_func(2) = 1 + 1 = 2
fib_func(4) = fib_func(2) + fib_func(3) = 1 + 2 = 3
fib_func(5) = fib_func(3) + fib_func(4) = 2 + 3 = 5
...
fib_func(n) = fib_func(n-2) + fib_func(n-1)
3 2
4 3
5 5
6 8
'''
lambda表达式
'''
1、使用递归实现斐波那契数列
0 1 1 2 3 5 8 13 21 ...
第一个条件
1、必须要有出口
2、必须自己调用自己
'''
def fib_func(n):
# 初始值设置 如果n是0或者1 则直接返回本身
if n in (0, 1):
# 只要执行return 本次函数调用就终止
return n
return fib_func(n-2) + fib_func(n-1)
# 传递一个数 然后就是打印前几位
for i in range(10):
print(fib_func(+i), end=' ')
'''
分析:
fib_func(0) = 0
fib_func(1) = 1
fib_func(2) = fib_func(0) + fib_func(1) = 0 + 1 = 1
fib_func(3) = fib_func(1) + fib_func(2) = 1 + 1 = 2
fib_func(4) = fib_func(2) + fib_func(3) = 1 + 2 = 3
fib_func(5) = fib_func(3) + fib_func(4) = 2 + 3 = 5
...
fib_func(n) = fib_func(n-2) + fib_func(n-1)
3 2
4 3
5 5
6 8
'''
lambda表达式传参
# 普通方法实现
def func1(a, b):
return a + b
print(func1(2, 3))
# :前面传递的是参数,后面是返回值
func2 = lambda a, b: a + b
print(func2(3, 4))
lambda的参数形式
# 无参数
print(lambda: 100) # 这是函数
print((lambda: 100)()) # 这是函数的调用
# 一个参数
print((lambda a: a)("Hello World"))
# 默认值参数 没有传递的参数是直接使用默认值即可
print((lambda a, b, c=100: a + b + c)(300, 200))
# 可变参数 传递的所有参数都使用args接收,*必不可少
print((lambda *args: args)(100, 150, 200))
# 可变参数 传递的是键值对 ** 必不可少
print((lambda **kwargs: kwargs)(name="python", age=27))
lambda的应用
# 无参数
print(lambda: 100) # 这是函数
print((lambda: 100)()) # 这是函数的调用
# 一个参数
print((lambda a: a)("Hello World"))
# 默认值参数 没有传递的参数是直接使用默认值即可
print((lambda a, b, c=100: a + b + c)(300, 200))
# 可变参数 传递的所有参数都使用args接收,*必不可少
print((lambda *args: args)(100, 150, 200))
# 可变参数 传递的是键值对 ** 必不可少
print((lambda **kwargs: kwargs)(name="python", age=27))
lambda的应用排序
# 定义一个学生列表 然后对他进行排序
students = [
{"name": "**", "age": 88},
{"name": "**", "age": 99},
{"name": "**", "age": 5}
]
# def func1(x):
# return x["age"]
# func2 = lambda x: x["age"]
# students 会把数据传递给 func1
# 返回值 会按照升序进行排序
students.sort(key=lambda x: x["age"], reverse=False)
print(students)
# 降序进行排序
students.sort(key=lambda x: x["age"], reverse=True)
print(students)
将函数进行传递
a = -9
# abs是绝对值函数
b = abs(a)
print(b)
def func1(a, b, f):
# f = abs
# print(a, b, f)
return f(a) + f(b)
# abs这个函数 传递给f 将函数作为参数进行传递
result = func1(-6, 7, abs)
print(result)
map的内置函数
lst = [1, 2, 3, 4, 5]
# 计算x的平方
def func1(x):
return x ** 2
# 普通方法
# lst1 = []
# for i in lst:
# print(func1(i), end=' ')
# lst1.append(func1(i))
# print(lst1)
# 返回的是一个map对象 本身是一个迭代器 实际上也是一个数据类型
# python2 result是列表
# python3 result是迭代器
result = map(func1, lst)
print(result, type(result))
# 迭代器循环获取
for i in result:
print(i)
# 迭代器转换为列表
result2 = list(result)
print(result2, type(result2))
'''
迭代器和列表的区别:
迭代器和列表本质上都是容器,
迭代器循环获取之后,里面的内容就被拿走了,就是空的容器,
列表循环获取之后,里面的内容还在,列表持久化了。
迭代器,CPU取迭代器中选择工作,工作完成之后不会重复执行同一个工作
【工作1, 工作2, 工作3】
'''
reduce内置函数
import functools
lst = [1, 2, 3, 4, 5]
def func1(a, b):
return a + b
# lst中的值 依次传递给func1
# reduce会将lst中的前两个数 相加,然后再和第三个数 一起传递给func1,然后结果再和第四个数...
result = functools.reduce(func1, lst)
print(result)
flite内置函数
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
# 过滤函数 返回一个filter对象
result = filter(func, lst)
print(result, type(result))
print(list(result))
'''
练习:
1、首先有一个0-100的列表【1,2,3..99,100】
选出斐波那契额数列形成一个列表【1,2,3,5,8,13,21,34,55,89】
再选出其中的三的倍数,【3,21】
最后相加24
'''
学生管理系统
'''
学生信息存储格式:
student_list = [
{"name": "麻", "age": 20, "gender": "man"},
{"name": "腾", "age": 21, "gender": "woman"},
{"name": "田", "age": 19, "gender": "man"}
]
'''
student_list = []
# 业务框架 需要执行菜单
def show_menu():
print("1.添加学生信息")
print("2.删除学生信息")
print("3.修改学生信息")
print("4.查询单个学生信息")
print("5.查询所有学生信息")
print("6.退出系统")
'''
添加学生信息
1.告诉我添加谁,以及年龄和性别
2.组装成为一个字典
3.添加到列表中
'''
def insert_student():
# 1.输入学生信息
name = input("请输入需要添加的学生姓名:")
age = int(input("请输入需要添加的学生年龄:"))
gender = input("请输入需要添加的学生性别:")
# 2.生成一个学生字典
# {"name": "麻宏", "age": 20, "gender": "man"}
student_dict = {"name": name, "age": age, "gender": gender}
# 3.将学生信息添加到列表中
student_list.append(student_dict)
print("===================== 添加学生信息成功 =====================")
# 删除学生信息
def remove_student():
# 1.输入需要删除的学生姓名
name = input("请输入需要删除的学生姓名:")
for stu in student_list:
# 学生信息存在的情况
if stu["name"] == name:
# 执行删除学生信息
student_list.remove(stu)
print("==================== 删除学生信息成功 ===================")
break
else:
print("======= 学生信息不存在 =======")
# 查询所有学生信息
def show_all_info():
# 1.检查学生列表是否为空
if len(student_list) > 0:
for stu in student_list:
print(stu)
print("===================== 查询所有学生信息成功 ====================")
else:
print("======= 目前还没有学生信息 =======")
def main():
# 开启系统
while True:
show_menu()
opt = input("请告诉我你的选择是:")
if opt == "1":
print("======= 执行添加学生信息 =======")
insert_student()
elif opt == "2":
print("======= 执行删除学生信息 =======")
remove_student()
elif opt == "3":
print("执行修改学生信息")
elif opt == "4":
print("执行查询单个学生信息")
elif opt == "5":
print("执行查询所有学生信息")
show_all_info()
elif opt == "6":
print("============ 执行退出系统,学生列表清零 =============")
break
else:
print("===== 您输入的数字有误,请重新输入 =====")
continue
# 本地执行代码
# 只有本文件自己执行的时候 才会被执行的代码
# 其他文件如果要执行本文件 则下面的代码不会被执行
# 这是一种对文件的保护措施
if __name__ == '__main__':
main()
'''
作业:修改学生信息和查询单个学生信息
'''