nlp——python学习记录(7)

今天的内容是递归函数,文件等内容。内容相对来说比较少,但是需要理解的内容相对多哦。

# 递归函数:如果一个函数在内部调用自身的话就叫做递归
# 形成条件: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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值