我已经为下面的问题写了一个解决方案。
问)让我们尝试编写一个与if语句完全相同的函数:
def if_function(condition, true_result, false_result):
"""Return true_result if condition is a true value, and false_result otherwise."""
if condition:
return true_result
else:
return false_result
在所有情况下,此函数实际上与if语句不同。为了证明这一点,写函数c,t和f使得其中一个函数返回数字1,但另一个函数不返回:
def with_if_statement():
if c():
return t()
else:
return f()
def with_if_function():
return if_function(c(), t(), f())
def c():
"*** YOUR CODE HERE ***"
def t():
"*** YOUR CODE HERE ***"
def f():
"*** YOUR CODE HERE ***"
解决方案:
>>> def c():
return 2 < 3
>>> def t():
return 2 < 3
>>> def f():
return not 2 < 3
>>> print(with_if_function())
True
>>>
我的问题:
如果我的解决方案是正确的,请你确认一下吗?
或
你认为我还没有正确理解这个问题吗?
答案 0 :(得分:3)
我对这个问题的解释是,您必须写c()
,f()
和t()
,以便with_if_statement()
和with_if_function()
返回不同的结果。< / p>
根据您提供的定义,他们目前都返回True
,表示您的解决方案不正确。
我相信几乎可以肯定有多种解决方案,但这是一种可能的解决方案:
def c():
"*** YOUR CODE HERE ***"
return True
def t():
"*** YOUR CODE HERE ***"
if not hasattr(f, "beencalled"):
return 1
return 0
def f():
"*** YOUR CODE HERE ***"
f.beencalled = True
return 0
print(with_if_function())
print(with_if_statement())
此处with_if_function
返回1
,而with_if_statement
返回0
,从而满足其中一个函数返回数字1的要求,但另一个确实不强>
答案 1 :(得分:2)
您可能缺少的是您将函数的结果传递给if_function
而不是函数本身。所以这个:
if_function(c(), t(), f())
......相当于:
_c = c()
_t = t()
_f = f()
if_function(_c, _t, _f)
也就是说,您的condition
函数,true_result
函数和false_result
函数在 if_function
之前都被称为。
但是,通过一点额外的努力,很容易让它变得更加相似:
def delayed_call(x):
# if x is a function, call it and return the result, otherwise return x
return x() if hasattr(x, '__call__') else x
def if_function(condition, true_result, false_result):
if delayed_call(condition):
return delayed_call(true_result)
else:
return delayed_call(false_result)
然后if_function(c(), t(), f())
变为if_function(c, t, f)
答案 2 :(得分:1)
def if_function(condition, true_result, false_result):
"""Return true_result if condition is a true value, and
false_result otherwise.
>>> if_function(True, 2, 3)
2
>>> if_function(False, 2, 3)
3
>>> if_function(3==2, 3+2, 3-2)
1
>>> if_function(3>2, 3+2, 3-2)
5
"""
if condition:
return true_result
else:
return false_result
def with_if_statement():
"""
>>> with_if_statement()
1
"""
if c():
return t()
else:
return f()
def with_if_function():
return if_function(c(), t(), f())
这个问题要求写下3个函数:c
,t
和f
,以便with_if_statement
返回1
而with_if_function
不会返回1(它可以做任何其他事情)
一开始,这个问题似乎很荒谬,因为从逻辑上讲,with_if_statement
返回with_if_function
是相同的。但是,如果我们从解释器视图中看到这两个函数,它们就不同了。
函数with_if_function
使用一个调用表达式,该表达式保证在将if_function
应用于结果参数之前评估其所有操作数子表达式。因此,即使c
返回False
,也会调用函数t
。相比之下,如果with_if_statement
返回False,t
将永远不会调用c
。 (来自UCB网站)
def c():
return True
def t():
return 1
def f():
'1'.sort()