2012-01-18 9 views
3

私たちの教授はこの問題を説明しましたが、まだそれほど意味がありません。Python Homework - 意味がない

質問:いくつかの整数a <= x <= bと一部整数n <= k、nはXにfの用途のためにXであろう場合は1を返す関数knice(f,a,b,k)、(例えば)と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日15: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 
+0

インデントが少しずれていると思いますが、2番目の 'for'ループは最初の内側にあるはずです。また、 'z'とは何ですか?最後に、この関数からは全く戻りません。この例は単なる出発点ですか、それとも実際に機能することを意図していますか? –

+0

それは問題です。教授は何かが何を意味するのかを特定せず、40名のクラスにこれを説明しました。誰も何をすべきか分からなかったからです。正直言ってそれがzか2かどうかは分からなかった! – seiryuu10

+2

さて、それは非動作の出発点と考えてください。いくつかの並べ替えとマイナーな調整で、その機能を動作させることができます。 –

答えて

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(f(b)) = b、...、またはf^n(b) = bです。

明白なアルゴリズムはすぐに気になるはずです:これらの値を1つずつ試してみてください!長方形の値を反復処理するので、2つの(ネストされた)ループが必要です。あなたは今何をすべきか見ることができますか?

+0

私はそれを実際に見ますが、それは私が問題を抱えていることをコード化しようとしています。私はPythonに正式な経験をしていませんでした。そして、それは "ここに行きます、期日にそれを入れてください"というものでした。 – seiryuu10

4

ええ、私はなぜ見ることができますそれは混乱するかもしれません。

f(f(f(...(f(x)))) = xは3重引用符で囲まれていましたか?これは関数のドキュメント文字列です。コードにコメントするようなものです。それはそれを保護する何かがなければ独立してはならない。

fがincrement_by_oneと呼ばれていたとします。

2のXのような10倍がどんなにあなたがインクリメント回数12を与えないだろうincrement_by_oneを呼び出すと、あなたは今、fがmultiply_by_one呼ばれた想像バック2

を得るように見えることはありません。

multiply_by_oneを呼び出すxの3倍のような5倍は3を与えます。

だから、あなたは

knice(increment_by_one, 1, 3, 5)(あなたが関数を記述する必要が)に対してテストすることができますいくつかの例の出力は0

knice(multiply_by_one, 1, 3, 5)を返しますが、別のヒントとして1

を返します、インデントは重要ですPythonで。

+0

これは本当にクリアされました。その教授のコードは、まったく意味がありません。 – Droogans

+0

@Droogans:最終的な答えに(構造的に)近いはずです。構文は実際にはPythonではなく、コード内の「変数」はあなたが記入するプレースホルダーなどです。答えを見つけたら、教授のコードの違いよりも類似点があるかもしれません(Greg's 2番目のコメントは約)。このトリックは、最初に関数の複雑な目標を理解することでした。もしあなたがそれを手に入れたら、幸運を祈る。 – ccoakley

+0

申し訳ありませんが、問題を押すと、別の教室の新入生がこのように見えるので、CSプログラムから逃げ出したことに反対してボーナスが得られるかどうか疑問に思っています。私が講義に参加していたなら、ここに掲載された「事例」についての意見が異なるかもしれません。 ':)' – Droogans

0

具体的な例を示します。小さく始めて、knice(f, a=1, b=2, k=1)と呼んだとします。 k==1については、関数の反復処理について心配する必要はありません。考慮すべきxの唯一の値は1と2であるので、f(1)==1またはf(2)==2の場合、kniceは1(つまり真)を返すことができます。

ここでknice(f, a=1, b=2, k=2)が呼び出されたとします。 f(f(1))f(f(2))もチェックする必要があります。

kが大きくなると、fに電話する必要があります。 abの範囲が大きくなると、fの引数として、より多くの値のxを試す必要があります。