python通过内置函数测试对象类型_python测试开发(01-递归函数+内置函数)

# 生成器三个方法:send,close throw

# send()发送数据 f

# def gen():

# for i in range(10):

# j=yield i

# print(j)

# g=gen()

#

# print(next(g))

# print(g.send(100))

# print(next(g))

# print(next(g))

# print(g.send(10000))

# print(next(g))

#

# close()关闭生成器

# g.close()

# print(g.send(100)) # 关闭生成器后,无法返回值

# throw() 异常方法 ---->不常用

# g.throw(Exception, "Method throw called!") # 异常类型

# g.throw(ValueError, "hello python!") # 异常信息

1. 递归函数 :自己调用自己,建议不要经常用,性能差

# def func():

# print("9999")

# func()

# func()

print("===========")

# 阶乘函数

def func(n):

if n==1: # 递归临界点:不再调用自身函数条件

return 1

else:

return n*func(n-1)

res=func(2)

print(res)

from collections import Iterator, Iterable, Generator

2. 内置函数:map filter zip

# map

# filter,过滤函数,第一个参数是函数,第二课参数是可迭代对象

def func(n):

return n > 10

li = [1, 2, 3, 444, 77, 99, 102, 345]

res = filter(func, li)

# 返回一个对象

print(res) #

print(list(res))

li2 = iter(li)

li3 = (i for i in range(5))

print(isinstance(li, Iterable)) # True

print(isinstance(li2, Iterable)) # True

print(isinstance(li3, Iterable)) # True

# map:将可迭代对象汇总的数据迭代出来,一个一个传到函数中去调用,将返回结果放到列表中

res2 = map(func, li)

# 返回一个对象

print(res2) #

print(list(res2)) # [False, False, False, True, True, True, True, True]

# zip 打包,将可迭代对象作为参数,将对象中对应的元素打包成一个个元组

res4 = zip([1, 2, 3], [11, 22, 33])

print(res4) #

print(list(res4)) # [(1, 11), (2, 22), (3, 33)]

dict1={"key1":1, "key2":2, "key3":3}

print(list(dict1.items())) # [(‘key1‘, 1), (‘key2‘, 2), (‘key3‘, 3)]

# 匿名函数

def func4(a, b):

c=a+b

print(c)

return a+b

# pep8 不介意怎么用,占用内存

l1= lambda a,b:a+b

# 这个写法跟下面一样的

#l1= (lambda a,b:a+b)(9,8)

print(l1(3,5))

# lambda 的用法

li = [1, 2, 3, 444, 77, 99, 102, 345]

res3=filter(lambda x:x<10,li)

print(list(res3)) #[1, 2, 3]

li5=[lambda x:x%5==0 for i in range(100)]

print(li5) #返回函数

# 三目运算符

a=100

if a>100:

print(100)

else:

print(22)

# 三目运算符

print(100) if a>100 else print(22)

# 偏函数

from functools import partial

ls1 = [1, 2, 3, 444, 77, 99, 102, 345]

ls2 = [1, 2, 3, 444, 77, 99, 102, 345]

ls3 = [1, 2, 3, 444, 77, 99, 102, 345]

ls4 = [1, 2, 3, 444, 77, 99, 102, 345]

filter2 =partial(filter, lambda x:x>5)

res5=filter2(ls1)

res5=filter2(ls2)

res5=filter2(ls3)

res5=filter2(ls4)

print(list(res5)) # [444, 77, 99, 102, 345]

# 作业一:利用递归函数实现斐波那契数列

def fib_seq(n):

a,b=0,1

for i in range(n+1):

a,b =b,a+b

return a

for i in range(20):

print(fib_seq(i), end=‘ ‘)

print("-----------")

# 递归法

def fib_loop(n):

assert n>=0, "n>0"

if n<=1:

return n

return fib_loop(n-1)+fib_loop(n-2)

for i in range(1,20):

print(fib_loop(i), end=" ")

print("-----------")

# 作业二:第三个月起每个月生一对兔子,小兔子涨到第三个月后每个月又生一对兔子,例如兔子都不死,问每个月的兔子总数生多少?(意味着生长期为:2)

def rabbit_number(month):

if month == 1:

return 1

elif month == 2:

return 1

elif month == 3:

return 2

else:

return rabbit_number(month - 1) + rabbit_number(month - 2)

print(‘兔子总数为{}对‘.format (rabbit_number(20)))

# 作业三:小明有100元钱,打算买100本书,A类书籍5元1本,B类书籍3元1本,C类书籍1元2本,请用程序算出小明一共有多少种买法

def Buy_book(money, book):

num = 0

for a in range(int(money / 5)):

for b in range(int(money / 3)):

for c in range(int(book + 1)):

if a * 5 + b * 3 + c * 0.5 <= book and a + b + c == book:

print(‘5元书买{}本,3元书买{}本,1元书买{}本‘.format(a, b, c))

num += 1

return num

print(‘100元钱 买100本书 共有{}中方法‘.format(Buy_book(100,100)))

#结果:100元钱 买100本书 共有129中方法

# 作业四:现在有一个列表 li = [11,21,4,55,6,67,123,54,66,9,90,56,34,22], 请将 大于5的数据过滤出来,然后除以2取余数,

li = [11,21,4,55,6,67,123,54,66,9,90,56,34,22]

def judge(n):

return n > 5

def judge2(n):

return n % 2

def judge3(li):

return map(judge2, list(filter(judge, li)))

print(list(judge3(li)))

# 作业五:有一个列表 li2 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],请用上课讲的知识处理成下面的格式:

# li4 = [[1,2,3],[4,5,6],[7,8,9][10,11,12],[13,14,15]]

li2 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

def conversion(li2):

li4 = iter(li2)

li3 = list(zip(li4, li4, li4))

h = 0

for i in li3:

li3[h] = list(i)

h+=1

print(li3)

a = [1,2,3]

b = [‘a‘, ‘b‘, ‘c‘]

print(list(zip(b, a)))

conversion(li2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值