Query On Python Function That Does The Same As If Statement
Solution 1:
My interpretation of the question is that you have to write c(), f(), and t() such that with_if_statement() and with_if_function() return different results.
With the definitions you have given, they currently both return True, which indicates your solution is not correct.
I believe there are almost certainly multiple solutions, but here is one possible solution:
defc():
"*** YOUR CODE HERE ***"returnTruedeft():
"*** YOUR CODE HERE ***"ifnothasattr(f, "beencalled"):
return1return0deff():
"*** YOUR CODE HERE ***"
f.beencalled = Truereturn0print(with_if_function())
print(with_if_statement())
Here with_if_function returns 1, while with_if_statement returns 0, thus satisfying the requirement that one of the functions returns the number 1, but the other does not
.
Solution 2:
What you may be missing is that you're passing the result of your functions into if_function and not the functions themselves. So this:
if_function(c(), t(), f())
...is equivalent to:
_c = c()
_t = t()
_f = f()
if_function(_c, _t, _f)
That is, your condition function, true_result function and false_result function are all called beforeif_function.
With a little extra effort, though, it's easy to make it more similar:
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)
And then if_function(c(), t(), f()) becomes if_function(c, t, f)
Solution 3:
defif_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
defwith_if_statement():
"""
>>> with_if_statement()
1
"""if c():
return t()
else:
return f()
defwith_if_function():
return if_function(c(), t(), f())
The question requires that, write 3 functions: c, t and f such that with_if_statement returns 1 and with_if_function does not return 1 (and it can do anything else)
At the beginning, the problem seems to be ridiculous since, logically, with_if_statement returns and with_if_function are same. However, if we see these two functions from an interpreter view, they are different.
The function with_if_function uses a call expression, which guarantees that all of its operand subexpressions will be evaluated before if_function is applied to the resulting arguments. Therefore, even if c returns False, the function t will be called. By contrast, with_if_statement will never call t if c returns False. (From UCB website)
defc():
return True
deft():
return1deff():
'1'.sort()
Post a Comment for "Query On Python Function That Does The Same As If Statement"