2017-01-28 6 views
1

特定のタスクの実行方法を理解しましたが、2つの完全に別々の関数を作成して定義する必要がありました。私はその元の関数とただ1つのreturn文を持っていますが、どうやってそれを行うのか分かりません。私が持っているものPythonコードを1つのreturnステートメントに最適化

(25, 1.6180339887498754) 

fp機能が100%に働く何かであり、それはlambda x: 1 + 1/xと1.0の設定値などを受け入れる:あなたはfp_golden_ratio_avgdamp()プリントを呼び出すとき

def fp_golden_ratio_avgdamp(): 
    return fp(avgdamp(lambda x: 1 + 1/x), 1.0) 

def avgdamp(f): 
    return lambda x: avg(float(x), f(x)) 

def avg(x, y): 
    return (x + y)/2.0 

何らかのエラーポイントが印刷される

(32, 1.6180339887499087) 

だから、私はそのFP関数に渡そうとしているものは、最初に他の2つの関数を通過するものです。この時

私の試みがあった。

def fp_golden_ratio_avgdamp(): 
    return fp(lambda x:(((float(1 + 1/x) + (1 + 1/x))/2.0)) , 1.0) 

しかし、私は、この印刷さ

return fp(lambda x: 1 + 1/x, 1.0) 

やっていたかのように、これは同じことになった:へだから

(32, 1.6180339887499087) 

を私の質問をまとめる:avgdampavgの機能を取り除きたい1ライナーに最適化してください。

def fp_golden_ratio_avgdamp(): 
    return fp('''do something with this (lambda x: 1 + 1/x) that is the same computation of the avgdamp and avg functions''', 1.0) 

誰かが私を助けてくれますか?

+3

なぜ* one-liner *である必要がありますか? – wwii

+0

彼は私たちが1人であることを望んでいますが、それを理解しようと時間を費やしましたが、2つの別々の機能を作成しなければできませんでした。 –

+0

これは宿題ですか? – wwii

答えて

2

私はこのインクリメンタルを通じてつもりです:

def avgdamp(f): 
    return lambda x: (float(x) + f(x))/2.0 

今これはfp_golden_ratio_avgdampと組み合わせる必要が:

def fp_golden_ratio_avgdamp(): 
    return fp(avgdamp(lambda x: 1 + 1/x), 1.0) 

def avgdamp(f): 
    return lambda x: avg(float(x), f(x)) 

def avg(x, y): 
    return (x + y)/2.0 

これは簡単に一つの関数に入れることができますだからavgdamp関数の1つの引数を取得し、それが適用されますあなたが両方の値にあなたの1+1/x機能を適用

def fp_golden_ratio_avgdamp(): 
    return fp((lambda x: (float(x) + 1 + 1/x)/2.0), 1.0) 

注:第二の値に私たちは、元そこに関数を適用する必要が問題だ

return fp(lambda x:(((float(1 + 1/x) + (1 + 1/x))/2.0)) , 1.0) 

((float(1 + 1/x) + (1 + 1/x)) = 2 * (1 + 1/x)xをもしので、浮動小数点数です)、平均値は単純に(1+1/x)です。

+0

ありがとう!あなたはちょうど分の問題で何時間もやろうとしてきたことを要約しました。 –