查询与if语句相同的python函数

时间:2014-04-04 06:44:57

标签: python

我已经为下面的问题写了一个解决方案。

问)让我们尝试编写一个与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
>>> 

我的问题:

如果我的解决方案是正确的,请你确认一下吗?

你认为我还没有正确理解这个问题吗?

3 个答案:

答案 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个函数:ctf,以便with_if_statement返回1with_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()