2016-09-12 10 views
-1

私は、コメントを「クリーン」に見せるために私の機能を修正するように言われています。私はalotを試してみました..しかし、私は何をしようとしているの達成するためにllambdaを使用する方法がわかりません。私のコードは動作します..それは私の質問されているものではありません。私の機能を修正するにはどうしたらいいですか?

ここに私のコードを修正する方法の提案があります。

def immutable_fibonacci(position): 

    #define a lambda instead of def here 
    def compute_fib (previousSeries, ignore): 
     newList = previousSeries 

     if len(newList) < 2: # Do this outside and keep this function focused only on returning a new list with last element being sum of previous two elements 
      newList.append(1) 

     else: 
      first = newList[-1] 
      second = newList[-2] 
      newList.append(first+second) 
     return newList 

    range=[None]*position 
    return reduce(compute_fib, range, []) 

#Above is too much code. How about something like this: 
#next_series = lambda series,_ : (Use these instead of the above line) 
#return reduce(next_series, range(position - 2), [1, 1]) 

何かが役立ちます。私はこれらの提案をどのように実装できるか混乱しています。

これは私が試みたものです。

def immutable_fibonacci(position): 
    range=[None]*position 
    next_series = lambda series, _ : series.append(series[-1] + series[-2]) 
    return reduce(next_series, range(position - 2), [1, 1]) 
+0

です一般的には、それは '再定義することはおそらく良いアイデアではありません> = 2.従来のFIB位置する関数を呼び出すと仮定しています範囲 '。 – 101

+0

何を参照できないのですか? –

+1

そのコードの全体のデザインは狂っています。単純な 'for'ループではなく' None'値のリストで 'reduce'を使うのはなぜですか? – Blckknght

答えて

0

append関数は、なしを返します。あなたは新たな配列

next_series = lambda series: series + [series[-1] + series[-2]] 

を返却する必要がある。またrangeの名前を変更しても、目的を果たすされていません。

def immutable_fibonacci(position): 
    next_series = lambda series: series + [series[-1] + series[-2]] 
    return reduce(next_series, range(position - 2), [1, 1]) 

これはあなただけ(0)0とFIB(1)1

+0

まだ動作しません...私のやり方よりも理にかなっていますが。リストオブジェクトが3行目で呼び出し可能でないというエラーが発生する –

+0

フィボナッチシーケンスの長さが0または1である必要がありますか? –

+0

基本的に私が送る位置は6です.1,1,2,3,5,8 –

関連する問題