私はPythonコースCS61AをBerkelyから非公式にやっています。私は、提供されたテンプレートの最後に1つの式を提供する必要がある簡単な割り当てによっては完全に困惑しています。ここに問題コードがあります:Pythonの1行で困惑しました
# HW 4 Q5. (fall 2012)
def square(x):
return x*x
def compose1(f, g):
"""Return a function of x that computes f(g(x))."""
return lambda x: f(g(x))
from functools import reduce
def repeated(f, n):
"""Return the function that computes the nth application of f, for n>=1.
f -- a function that takes one argument
n -- a positive integer
>>> repeated(square, 2)(5)
625
>>> repeated(square, 4)(5)
152587890625
"""
assert type(n) == int and n > 0, "Bad n"
return reduce(compose1, "*** YOUR CODE HERE ***")
repeated(square, 2)(5) # Sample run
私はこの作業を行うためにすべてを試しました。この返信はそれを行うべきであると私には思われます:
return reduce(compose1, range(n))
しかし、私は近くでもありません。 Compose1は2つのargs(f、g)をとり、これらは両方とも関数でなければなりません。しかし、return文が 'compose1'を呼び出すとき、 'compose1'は 'f'に '0'を、 'g'に 'n'を使います。しかし 'f'と 'g'は 'square'という関数でなければなりません。
私は何が欠けていますか?
ここに私のヒントがあります:「f」の「n番目の」アプリケーションを計算しようとしています。つまり、コードが抜けていれば(何らかの形で)「f」と「n」の両方が含まれている必要があります。あなたの提案されたreturn文は 'f'で何もしません。 'n'回' f'をどのように実行するのか考えてみてください。 –