【问题标题】:Python Homework - Not making sensePython作业 - 没有意义
【发布时间】:2012-02-13 16:08:34
【问题描述】:

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

问题:实现函数knice(f,a,b,k),如果对于某个整数a <= x <= b 和某个整数n <= k,将返回1,f 在x 上的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 2012 年 1 月 19 日下午 3:03 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

【问题讨论】:

  • 我认为缩进有点偏离,第二个for 循环可能应该在第一个循环内。另外,z 是什么?最后,这个函数根本没有return。这个例子只是一个起点还是打算成为一个工作函数?
  • 这就是问题所在。教授没有具体说明任何示例的含义,他向全班 40 人解释了这一点,因为没有人知道该怎么做。老实说,我不知道它是 z 还是 2!
  • 好吧,那就把它当作一个不工作的起点吧。通过一些重新排列和细微调整,您可以使该功能发挥作用。
  • @seiryuu10:如果您甚至无法理解教授显然是错误的,更不用说让它按原样工作了。我确实认为z 应该是2
  • 我可能只是“这里有一些我想让你做的伪代码”的例子。

标签: python list integer


【解决方案1】:

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

你想弄清楚是否

  • 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

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

【讨论】:

  • 我确实看到了它,但它正在尝试编写我遇到问题的代码。我没有使用 Python 的正式或其他方面的经验,这是一个“给你,在截止日期提交”的事情。
【解决方案2】:

是的,我明白为什么这可能会令人困惑。

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。甜蜜。

因此,您可以测试一些示例输出(您必须编写函数)

knice(increment_by_one, 1, 3, 5) 将返回 0。

knice(multiply_by_one, 1, 3, 5) 将返回 1。

作为另一个提示,缩进在 python 中很重要。

【讨论】:

  • 你真的清除了这个。那位教授的代码几乎没有意义。
  • @Droogans:它应该接近(在结构上)最终答案。语法实际上不是python,代码中的“变量”是供您填写的占位符,等等。但是,如果您确实找出答案,您可能会发现教授代码中的相似之处多于差异(这就是格雷格的第二条评论是关于)。诀窍是首先了解该功能的复杂目标。如果你掌握了这一点,祝你好运。
  • 很抱歉提出这个问题,但是看到另一位教授这样对待新生让我想知道他们是否获得了奖金,而不是让他们退出 CS 课程。如果我在听讲座,我可能对这里发布的“示例”有不同的看法。 :)
  • 我会坚持魔鬼/教授的拥护者立场:我不认为教授正在积极寻求损害新生对问题的理解。一旦你学会了编程,它就会影响你对这些问题的看法(以及你提供的例子)。当然,这可能是因为你的教授与新生水平的思维脱节。但可能有很多方法可以引入问题,而您的教授使用了一种对您不起作用的方法。我希望如果你去办公时间,教授会尝试不同的方法,也许是多种方法,直到他看到它“点击”。
【解决方案3】:

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

现在假设您拨打了knice(f, a=1, b=2, k=2)。您还必须检查f(f(1))f(f(2))

随着k 变得更大,您将不得不更多地致电f。随着ab 之间的范围变大,您将不得不尝试更多x 的值作为f 的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多