python - 如何多次应用一个功能?
问题描述
对于给定的函数(具有一个参数,参数类型和返回值类型相等)生成另一个多次应用原始函数的函数。例子:
from math import sin f1 = fn(lambda x: "sin(%s)" % x, 5) f2 = fn(lambda x: sin(x), 5) print("%s = %f" % (f1("1"), f2(1))) >>sin(sin(sin(sin(sin(1))))) = 0.587181 print("%s = %f" % (f1("2"), f2(2))) >>sin(sin(sin(sin(sin(2))))) = 0.606464 print(fn(lambda x: sin(x), 0)(1000)) >> 1000
函数签名:def fn (f, n)
- 使用“fn”(参见任务的第一部分)生成计算黄金比例近似值的函数。最终公式:
1 + 1 / (1 + 1 / (1 + 1 / (...))) 一些结果:
golden_ratio(0) = 1
golden_ratio(1) = 2
golden_ratio(2) = 1.5
golden_ratio(100) = 1.6180...
函数签名:def golden_ratio (n),其中 'n' 是调用次数(以及连分数中的项数)
这就是我所做的,黄金比例很好地计算了一切。但是对于任务的第一部分,出现了问题,如示例中...
第一个函数 fn 将应用类似函数给定的次数
第二个函数 - 黄金比例,应该使用 fn 来计算
代码:
n = 100
def golden_ratio(f,n):
def wrap(*arg):
for _ in range(n+1):
arg = f(*arg)
return arg
return wrap
def fib(q, w):
q, w = w, q + w
return q, w
f3 = golden_ratio(fib, n)
q, w = f3(0, 1)
# gold section
print(w / q)
它被执行,但并不完全正确,如示例中所示
解决方案
尝试使用这个:
def fn(f, n):
r = 1/2
for i in range(n):
r = f(r)
return r
f = lambda x: 1+(1/x)
fn(f, 20) # answer: 1.6180339789779863
推荐阅读
- java - Selenium Webdriver 问题无法打开谷歌浏览器
- python - Matplotlib - 对齐网格
- python - 如何使用 django 过滤器或以某种方式获取“最近”元素
- java - 来自 Firebase 的数据未显示在 RecyclerView 中
- php - 如果表单验证失败,则使用自定义请求类(laravel 5.8)通过输入重定向回来
- python - Flask 会话数据可以被用户(威胁参与者)更改吗?
- android - Android Studio 中的 Gradle 依赖项
- three.js - 我可以将 THREE.js 材料放在 gltf 模型上吗?
- git - 如何在 Mac 上为 Fork 配置 SSH 私钥?
- c++ - 合并排序和合并 C++