我在这里遇到关于knapsack problems的问题:
def f(v, i, S):
if i >= len(v): return 1 if S == 0 else 0
count = f(v, i + 1, S)
count += f(v, i + 1, S - v[i])
return count
当我尝试以更一般的形式写出第二行 if i >= len(v): return 1 if S == 0 else 0
时,我收到一个错误:
In [3]: if test1 : print x if test2 else print y
File "<ipython-input-3-9d4131fa0c48>", line 1
if test1 : print x if test2 else print y
^
SyntaxError: Missing parentheses in call to 'print'
击> <击> 撞击> 这是一个通用形式:
In [16]: if True : print("first") if True else print("second")
first
In [17]: if True : print("first") if False else print("second")
second
In [18]: if False : print("first") if True else print("second")
[nothing]
In [19]: if False : print("first") if False else print("second")
[nothing]
你怎么称呼它?
我很惊讶您可以为if...then...else
取出第二个正面案例并将其转换为if...else
。
更新:抱歉python3 noob错误,我只是没有注意。如上所述,答案在没有错误的情况下没有意义,所以我已经删除了错误的代码。
答案 0 :(得分:4)
您找到了ternary operator,在Python中称为Conditional Expression。表达式x if condition else y
表示如果条件(可以是复杂语句或函数)求值为True,则表达式返回x
,如果条件求值为False,则表达式返回{{1} }。
它的作用类似于以下if语句:
y
您的错误源于未将print function参数包装在括号中。这是对Python 3的更改,而在Python 2中,您的语法会很好。将其重写为:
if test1:
if test2:
print(x)
else:
print(y)
你的错误就会消失。
答案 1 :(得分:1)
我觉得重要的是要指出你描述的内容(if-if-else
)本身不是 条件表达式,但确实包括一个:
1 if S == 0 else 0
是条件表达式
if i >= len(v): return 1 if S == 0 else 0
是一个compound statement,它包含一个带有条件表达式的简单if
语句。
因此,如果第一个if
求值为True
,则将评估条件表达式,并返回相应的元素(在本例中为1
或0
)前面的陈述(return
,这里)。
答案 2 :(得分:0)
它是一个if表达式:a if condition else b
表示:如果 condition 为true,则表达式的值为 a ,否则 b
你的问题是无关的,似乎你正在使用python 3,你从python 2得到了例子。在python 3中print是一个函数,所以只需添加括号
答案 3 :(得分:-2)
如果你使用版本&gt; 3的python,那么print应该有括号,即()