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()

 

 

猜你喜欢

转载自blog.csdn.net/weixin_42719822/article/details/81805075
今日推荐