Python家庭作业 - 没有意义

时间:2012-01-18 22:42:02

标签: python list integer

好的,我们的教授解释了(有点)这个问题,但它仍然没有多大意义。

问题:如果对于某个整数knice(f,a,b,k)和某个整数a <= x <= b,实现将返回1的函数n <= k,x上的f的n个应用将为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

3 个答案:

答案 0 :(得分:5)

忽略他的代码;你应该写下你觉得舒服的东西,然后再解决问题。

你想知道是否

  • 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

应立即想到一个明显的算法:逐个尝试所有这些值!您将需要两个(嵌套)循环,因为您正在迭代一个值的矩形。你现在能看到该做什么吗?

答案 1 :(得分:4)

是的,我明白为什么会让人感到困惑。

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中很重要。

答案 2 :(得分:0)

这是一个具体的例子。从小处开始,假设您调用了knice(f, a=1, b=2, k=1)。对于k==1,我们不必担心迭代函数。 x要考虑的唯一值是1和2,因此如果knicef(1)==1 f(2)==2可以返回1(即True)。

现在假设你打电话给knice(f, a=1, b=2, k=2)。您还必须检查f(f(1))f(f(2))

k变大时,您需要再调用f。随着ab之间的范围变大,您必须尝试将x的更多值作为f的参数。