python - Python中的虚拟数字生成器
问题描述
使用an = (an-2 + 1)×an-1
witha0 = 0
和a1 = 1
公式查找dummy_numbers(max)
我的代码:
def dummy_numbers(nums):
binsize = (((nums - 2) +1) * (nums -1))
return map(lambda x: int(nums + binsize * x), range(nums))
for num in dummy_numbers(10):
print(num)
我的代码打印的结果与我预期的不同
解决方案
使用实际的生成yield
器使这更容易。这里棘手的部分是跟踪an-1
和an-2
迭代。这可以像这样实现:
second_last, last = None, None
for current in range(10):
second_last, last = last, current
assert (second_last, last) == (8, 9)
您还需要在返回的常量值中硬编码0
and 1
:
def dummy_numbers(an):
if an == 0:
yield 0
elif an == 1:
yield 0
yield 1
else:
an_2, an_1 = None, None
for an_0 in dummy_numbers(an - 1):
an_2, an_1 = an_1, an_0
yield an_0
yield (an_2 + 1) * an_1
for num in dummy_numbers(10):
print(num)
输出:
0
1
1
2
4
12
60
780
47580
37159980
1768109008380
您也可以像这样使这个非递归:
def dummy_numbers(an):
an_2, an_1 = None, None
for i in range(an):
if i == 0:
an_0 = 0
elif i == 1:
an_0 = 1
else:
an_0 = (an_2 + 1) * an_1
yield an_0
an_2, an_1 = an_1, an_0
推荐阅读
- azure - 通过 API 管理设置 Azure Log Analytics 使用的数据和选项
- javascript - Material UI CSS-in-JS 类型
- loops - handlebars.js - 根据辅助输出选择循环
- javascript - Hammer JS pressup 不适用于触摸屏?
- angular - Angular 的新手,收到一个错误,即我的变量没有定义,即使它们出现了?
- docker - 以非 root 用户身份构建 Docker 映像
- c - ud.convert() 的非 R 行为
- docker - 鼠标没有在带有 gui 应用程序的 Docker 上移动
- javascript - Javascript 复合正则表达式包含子正则表达式
- typescript - 当使用 vue-class-component 将 Vue 脚本作为单独的文件导入时,VSCode 不承认 $refs 组件类型