今天的内容是递归函数,文件等内容。内容相对来说比较少,但是需要理解的内容相对多哦。
# 递归函数:如果一个函数在内部调用自身的话就叫做递归
# 形成条件:1.自己调用自己;2.函数要有一个终止条件(出口)
# 求第几个人的年龄,每相邻两个人年龄差为2
# 求第num个人的年龄只需要num-1个人的年龄
# 递归会大量调用,占空间
def get_age(num):
if num == 1:
return 18
age = get_age(num-1) + 2
return age
print(get_age(1))
# 求阶乘
def func(n): # 普通方法
num = 1
for i in range(1,n+1):
num *= i
return num
def func1(n): # 递归
if n == 1 or n == 0:
return 1
num = func1(n-1) * n
return num
print(func(5))
print(func1(5))
# 匿名函数lambda
# 不能使用if语句,while循环,for循环,只能缩写单行代码
# lambda 参数列表:表达式
# 1.无参数无返回值
def func1():
print('hello')
(lambda : print('hello'))()
func1()
f1 = lambda: print('hello')
f1() # 无意义
# 2.无参有返回值
def func2():
return 1+2
print(func2())
f2 = lambda : 1+2
print(f2())
# 3.有参无返回值
def name(name):
print(name)
f3 = lambda name:print(name)
f3('hei')
# 4.有参有返回值
def func4(*args):
return args
f4 = lambda * args:args
print(f4(1, 2, 3, 4))
# 匿名函数的使用--作为函数参数使用
# 进行四则运算,func是要进行的运算
def my_cacl(a,b,func):
print('其他的函数代码...')
num = func(a,b)
return num
def add(a,b):
return a + b
print(my_cacl(10, 20, add))
print(my_cacl(10,20,lambda a,b : a-b))
print(my_cacl(10,20,lambda a,b : a/b))
# 列表排序,前提是列表中的数据类型要保持一致
list = [5,6,8,7,1]
list.sort()
print(list)
# 列表中的数据是字典类型,程序不知道如何排序,需要人为告知程序字典的排序方法
# 所以不能直接使用sort
list1 = [{'name':'d','age':50},
{'name':'e','age':12},
{'name':'a','age':50},
{'name':'t','age':45}]
# .sort(self,key,reverse),key:形参,需要传递一个函数制定规则,列表的数据根据什么排序
# 匿名函数的形参x是列表中的每一个数据
list1.sort(key=lambda x: x['name'])
print(list1)
list1.sort(key=lambda x: x['age'])
print(list1)
list2 = ['arfed','bc','ghdl','def']
list2.sort()
print(list2)
# 需求:根据列表中字符串的长度进行排序
# list2.sort(key=len)
list2.sort(key=lambda x: len(x))
print(list2)
# sort(key=lambda 形参:(排序规则1,排序规则2))
# 先1后2,当一个相同会按第二个排序
# reverse逆序
list1.sort(key=lambda x: (x['age'],x['name']),reverse=True)
print(list1)
列表推导式:
# 列表推导式,快速生成一个列表
# 1. 变量 = [生成数据的规则 for 临时变量 in xxx]
# 每循环一次就会创建一个数据
list = [i for i in range(5)]
print(list)
list1 = ['hello' for i in range(5)]
print(list1)
list2 = [f'num{i}' for i in list]
print(list2)
list3 = [i+i for i in range(5)]
print(list3)
# 2.变量 = [生成数据的规则 for 临时变量 in xxx if xxx]
# 每循环一次,并且if为true,生成一个数据
list = [i for i in range(5) if i % 2 == 0]
print(list)
# 3. 变量 = [生成数据的规则 for 临时变量 in xxx
# for j in xxx]
# 第二个for循环一次,生成一个数据
list4 = [(i,j) for i in range(3) for j in range(3)]
print(list4)
# 补充:字典推导式
# 变量 = {生成字典的规则 for i in xxx}
dict = {f'name{i}':i for i in range(3)}
print(dict)
dict1 = {f'name{i}':j for i in range(3) for j in range(3)}
print(dict1) # {'name0': 2, 'name1': 2, 'name2': 2}
# 字典的key相同则修改数据
集合set:
# 集合-set
# 定义使用{数据,数据}(字典是{key:value}),
# 1.集合中的数据必须是不可变类型
# 2.集合是可变类型(不能使用列表)【字典中的key也必须是不可变类型,字典中的key是字符串和数字】
# 3.集合是无序的,所有不支持下标 *** 作(数据的添加顺序和输出顺序是否一致)
# 4.集合中的数据是没有重复的(去重)
my_set = {1,2,3.14,'hello',True,(1,2)}
print(my_set,type(my_set))
# my_set = {[1,2]} 报错
my_set.remove(3.14)
print(my_set)
my_set.pop() # 随机删除
print(my_set)
my_set.add(100)
print(my_set)
# 修改数据,先删除再添加
my_set.clear() #清空
print(my_set) #set()
# 去重,集合不能有重复的
list1 = [1,2,3,6,4,2]
list1 = list(set(list1))
print(list1)
# 集合,列表,元组三者之间可以互相转换
文件:
# 文件:可以将数据永久的存储起来
# 在硬盘中存储的格式是二进制
# 1.打开文件,将文件从硬盘中存到内存中
# open(file,mode='r',encoding=None)
# file 要 *** 作的文件名,类型是str
# mode 文件打开方式,r(read)只读打开,w(write)只写打开,a(append)追加打开
# encoding 文件的编码格式,常见的是gbk,utf-8
# 返回值,文件对象,后续所有的文件 *** 作,都需要通过这个文件对象进行
f = open('1.txt','r') # 以只读方式打开当前目录中的1.txt文件
# 文件不存在会报错
# 2.读写文件 文件对象.read()
buf = f.read()
print(buf)
# 3.关闭文件 文件.close(),将内存中三大文件同步到硬盘中
f.close()
# 文件的写 *** 作
# w方式,如果文件不存在会创建文件,文件存在会覆盖清空原文件
f = open('a.txt','w',encoding='utf-8') # open没有指定文件的编码,windows下默认gbk
f.write('nihaoya\n')
f.write('hello python\n')
f.write('您好呀') # 产生乱码,使用gbk编码
# 在pycharm中双击打开文件默认使用的编码是utf-8
# 解决方案:将两种方式的编码统一即可
f.close()
# a-追加文件,在文件的末尾写入内容
# 文件不存在,会创建文件
# 注意点:不管是w还是a打开文件,写文件都是write()函数
f = open('b.txt','a',encoding='utf-8')
f.write('hello\n')
f.write('hello')
f.close()
# 补充
list = [10,20]
print(list) # [10, 20]
def func(a):
a += 30, # 在列表中+=是extend,即追加
func(list)
print(list) # [10, 20,30]
今天只有两道测试题呀
# 1.使用递归求1-100累加和
def sum(num):
if num == 1:
return 1
return num + sum(num-1)
print(sum(100))
# 2.向d.txt中书写好好学习天天向上的内容
f = open('d.txt','w',encoding='utf-8')
f.write('好好学习天天向上')
f.close()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)