这是一个我无法解决的家庭作业问题:
问题开始
Q3。让我们尝试编写一个与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())
问题结束
这是我想到的:
如果c()为true,则with_if_statement()不计算f(),但是在检查c()是否为真之前,with_if_function()会计算所有3。
所以,我想到在c()中分配一个全局变量,并在f()中改变它的值
继承我的代码(不起作用):
def c():
try:
global x
except NameError:
x=1
if x==1:
return True
else:
return False
def t():
if x==1:
return (1)
else:
return (0)
def f():
global x
x=2
if x==1:
return (1)
else:
return (0)
任何人都可以帮我找出答案吗?谢谢..!
答案 0 :(得分:2)
global
语句不应抛出NameError
(因此您不会在x=1
中运行c()
。我会尝试使用异常重写您的代码而不使用,他们没有必要解决这个问题并且使它变得比它需要的更复杂。使用全局变量并在函数中产生副作用肯定是正确的方法。
答案 1 :(得分:2)
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() # anything breaks the program is OK