python - 使用 send 修改生成器
问题描述
我想通过仅更改下面的操作生成器函数来修改生成器。这是一个让我整天摸不着头脑的人力资源挑战。我从上一个关于偶数的 SO 问题中得到了使用 send 的想法。我无法使用素数检查器开始工作。该算法应打印前 10 个非素数。它目前正在打印 3。
from math import sqrt
from itertools import count, islice
def is_prime(n):
if n < 2:
return False
for number in islice(count(2), int(sqrt(n) - 1)):
if n % number == 0:
return False
return True
# this is the only portion of the code that can be changed
def manipulate_generator(generator, n):
if not is_prime(n):
generator.send(n+1)
#all the code below cannot be changed
def positive_integers_generator():
n = 1
while True:
x = yield n
if x is not None:
n = x
else:
n += 1
k = int(input())
g = positive_integers_generator()
for _ in range(k):
n = next(g)
print(n)
manipulate_generator(g, n)
解决方案
推荐阅读
- xamarin - 为 Xamarin 注册 Intune 后未调用 RestartApplication
- python - 如何使用while循环终止python脚本并获得结果?
- apache-spark - Spark Standalone vs YARN
- angular - 如何在我的 Angular 应用程序中包含 jwplayer?
- c++ - Issue with Font Rendering using Freetype in OpenGL is not working
- qt - 双击时 TabView 中的 QML 可编辑选项卡标题
- java - Spring Boot 2.2.0 如何接受 RequestBody 中的日期参数?
- authentication - 有没有办法自定义 laravel auth 以验证用户是否预先存储在旧表中?
- c++ - 设计自己的结果/要么:成功类型和错误类型是否应该始终是明确的?
- python - 当保存在数据库 pandas 中时,长数字正在被转换为科学计数法