Python之生成式及生成器
1.****************查找1到100内的质数************
num=int(input())
def fun(num):
for i in range(2,num):
if num%i==0:
return False
else:
return True
print(fun(3)) 判断3是否为质数
print([i for i in range(1,101) if is(i)) 找出在1到100内的质数
实验如下:
返回值为True
2.腾讯面试题
判断质数后,执行以下
d 为1到100内所有质数的列表
count=0
for it in d:
if (num-it) in d and it <= num-it:
count+=1
print(count)
实验如图:
结果如下:
列表生成式:
例:[i**2 for i in range(2,10,2) if i%3==0] 求2到10内的偶数能整除3的数的平方
[i**2 if i%3==0 else pow(i,3) for i in range(1,101)] 在1到100内如果能整除3那么输出他的平方,否则输出他的三次方
3. li=[
[1,2,3],
[4,5,6],
[7,8,9]
]
print(list(zip(*li))) 先解包,再结合,最后转为列表 结果为:[ [1,4,7],[2,5,8],[3,6,9] ]
4.生成姓名为westos,成绩在60到100内的字典,一共20个key-value对。
import random
s={'westos'+str(i):random.randint(60,100) for i in range(20)}
在其中挑选90分以上的
d={name:score for name,score in s.items() if score>90}
5.随机生成电影清单及用户数据
import random
date={}
for useritem in range(100):
files=set([])
for filesitem in range(random.randint(1,10):
files.add(filesitem)
date[useritem]=files
print(date)
6.生成费伯纳其数列
def fib(num):
a,b,count=0,1,0:
while count <=num:
print(b)
a,b=b,a+b
count+=1
fib(10)
7.将字典的key value值调换
dict={'a':'yes','b':'no','c':'ok'}
C={v : k for k,v in d.items()}
将value值变为k值的大写
D={k:k.upper() for k,v in d.items()}
print(C,D)
8.生成器的应用
def fun():
while Ture:
print("welcome.....")
receive=yield "hello"
print(receive)
f=fun() 不返回 (因为有yield)
print(f) 返回:生成器
print(next(f)) 返回:welcome.... hello
f.send("微笑") 返回:微笑 welcome.... (到有yield处停下)
聊天机器人
def chat_robot():
res=' '
while Ture:
receive=yield res
if 'age' in receive:
res="年龄保密"
elif 'name' in receive:
res='li'
else:
res='I do not know what you say"
def main():
#生成器对象
robot=chat_robot()
next(robot)
while Ture:
send_data=input(‘粉条>>:’)
if send_data=='q' or send_data=='bye':
print("不聊了,我撤了.......")
break
print(robot.send(send_data))
函数中有yield返回值是生成器
main()