[英]Python Homework - Not making sense
好吧,我们的教授解释了(有点)这个问题,但它仍然没有多大意义。
问题:实现函数knice(f,a,b,k)
将返回1,如果对于某个整数a <= x <= b
和一些整数n <= k
,N的应用f
x上是x,(例如f(f(f...(f(x)))) = x
),否则为0。
教授提供的是:
def knice(f,a,b,k):
f(f(f(...(f(x)))) = x
for i = a to b:
y = f(i)
if y = i break
for j = z to k:
y = f(y)
if y = i break
就个人而言,这个例子对我来说毫无意义,所以想看看我是否能得到澄清。
OP EDIT 1/19/2012 3:03 pm CST
这是在GTA的帮助下计算出来的最终功能:
def f(x):
return 2*x-3
def knice(f,a,b,k):
x = a
while x <= b:
n = 1
y = f(x)
if y == x:
return 1
while n <= k:
y = f(y)
n=n+1
if y == x:
return 1
x=x+1
return 0
忽略他的代码; 你应该写下你觉得舒服的东西,然后再解决问题。
你想弄清楚是否
f(a) = a
,或f(f(a)) = a
,或......,或f^n(a) = a
, 或 f(a+1) = a+1
,或f(f(a+1)) = a+1
,或......,或f^n(a+1) = a+1
, 或者 , f(b) = b
,或f(f(b)) = b
,或......,或f^n(b) = b
。 应立即想到一个明显的算法:逐个尝试所有这些值! 您将需要两个(嵌套)循环,因为您正在迭代一个值的矩形。 你现在可以看看该怎么办了?
是的,我可以看出为什么这可能会令人困惑。
是f(f(f(...(f(x)))) = x
用三重双引号括起来吗?这是一个函数文档字符串,有点像评论你的代码。它不应该是独立的没有保护它的东西。
想象一下f被称为increment_by_one。
在x为2时调用increment_by_one 10次将得到12.无论你增加多少次,你似乎永远不会回来2。
现在假设f被称为multiply_by_one。
在x为3时调用multiply_by_one 5次将得到3. Sweet。
那么,你可以测试一些示例输出(你必须编写函数)
knice(increment_by_one, 1, 3, 5)
将返回0。
knice(multiply_by_one, 1, 3, 5)
将返回1。
另外一个提示,缩进在python中很重要。
这是一个具体的例子。 从小处开始,假设你称为knice(f, a=1, b=2, k=1)
。 对于k==1
,我们不必担心迭代函数。 要考虑的x
的唯一值是1和2,因此如果f(1)==1
或f(2)==2
, knice
可以返回1(即,True)。
现在假设你叫knice(f, a=1, b=2, k=2)
。 你还必须检查f(f(1))
和f(f(2))
。
随着k
变大,你将不得不再打电话给f
。 随着a
和b
之间的范围变大,你将不得不尝试将更多的x
值作为f
的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.