[Python]小甲鱼Python视频第049课(乱入:生成器)课后题及参考解答

# -*- coding: utf-8 -*-
"""
Created on Sun Mar 24 21:54:53 2019

@author: fengs
"""


"""
测试题(笔试,不能上机哦~):


0. 通常,一般的函数从第一行代码开始执行,并在什么情况下结束?
    return 、异常
    
1. 什么是协同程序?
    可以运行的独立函数调用,函数可以暂停,挂起,在需要的时候从程序离开的地方继续或者重新开始
    
2. 生成器所能实现的任何操作都可以由迭代器来代替吗,为什么?
    可以,生成器是一种特殊的迭代器
3. 将一个函数改造为生成器,说白了就是把什么语句改为 yield 语句?
    return 
    
4. 说到底,生成器的最大作用是什么?
    保存上一次迭代计算的环境,让下一次生成迭代的条件从上一次的结果开始
    
5. 如下,get_prime() 是一个获得素数的生成器,请问第 2 行代码 while True 有何作用?
def get_primes(number):
    while True:
        if is_prime(number):
            yield number
        number += 1
        
        
    保证生成器下次被调用时遇到的是新的yield,保证该生成器不结束,只要调用next烦烦噶就有值
"""


"""
0. 要求实现一个功能与 reversed() 相同(内置函数 reversed(seq) 是返回一个迭代器,是序列 seq 的逆序显示)的生成器。
"""

def myRev(str_value):
    while True:
        if str_value !="":
            yield str_value[-1]
            str_value = str_value[:-1:]
        else:
            break



for i in myRev("FishC"):
    print(i, end='')
    
    
"""
1. 10 以内的素数之和是:2 + 3 + 5 + 7 = 17,那么请编写程序,计算 2000000 以内的素数之和?
"""

def isPrime(number):
  if number <= 1: 
    return False
  i = 2
  while i*i <= number: 
    if number % i == 0: 
      return False
    i += 1
  return True

    
print('\n')
print(sum( x for x in range(2000000)  if isPrime(x) == True   ))
        
    





    
    
    
"""

def fabs():
    
    fn0 = 0
    fn1 = 1
    
    while True:
        fn0,fn1 = fn1,fn0+fn1
        yield fn0
        
for i in fabs():
    print(i)
    if i > 100:
        break
    
e = ( i for i in range(10))  #括号就是生成器推导式
print(next(e))    

"""




#print(sum( i for i in range(101)))

  

posted @ 2019-03-24 22:34  Alimy  阅读(348)  评论(0编辑  收藏  举报