# -*- 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)))