我正在学习本学期的Python入门课程(使用3.4),最近遇到了一个关于运算符优先级的练习,并使用括号使语句评估为true。
确切的问题是:
Add a single pair of parentheses to the expression so that it evaluates to true.
1 < -1 == 3 > 4
我认为正确答案是:
1 < -1 == (3 > 4)
鉴于比较运算符都处于相同的优先级,它们应该从左到右进行评估,因此它应该如下评估:
1 < -1 == (3 > 4)
1 < -1 == False
False == False
True
但是当我运行代码时它仍然返回false。我看到了这个问题comparison operators' priority in Python vs C/C++,这个表达的结果对我有意义;但是在这种情况下,在评估表达式的其余部分之前,我强迫对后一个语句进行评估,所以我不明白为什么我仍然得到错误的答案。
过去一小时我一直盯着它,我觉得我可能会忽视一些明显的东西;如果有人能够提供一些有关正确解决方案的见解,那将非常感激。
答案 0 :(得分:2)
这项任务显然是不可能的。考虑以下三种情况:
在-1
之前有一个空位。
-
和1
之间有一个开放的关系。
在其他任何地方都有一个空位。
这三种情况代表括号的每个可能位置。
在第一种情况下,我们有1 < ( ... )
,其中省略号是布尔表达式。由于1
不小于True
或False
,因此整个表达式为False
。
在第二种情况下,我们有1 < -( ...)
,其中省略号是一个布尔表达式。由于1
不小于-True
或-False
,因此整个表达式为False
。
在第三种情况下,我们有1 < -1 == ...
。由于链式运算符表达式的所有分支必须为True,并且由于1 < -1
为False,因此整个表达式为False
。
因此,在每种可能的情况下,结果都是假的。
答案 1 :(得分:1)
您走在正确的轨道上,但由于比较链接,您将拥有:
1 < -1 == (3 > 4)
1 < -1 == False
1 < -1 and -1 == False
False and False
False
请注意,我们不会从左到右评估第二行,而是将两个比较与一个和。链接在一起。
只有几种有效的方法可以为此添加一对括号,因此我们可以轻松地检查所有其他括号:
(1 < -1 == 3 > 4)
False #Trivially
(1 < -1) == 3 > 4
False == 3 > 4
False == 3 and 3 > 4
False and False
False
1 < (-1 == 3) > 4
1 < False > 4
1 < False and False > 4
False and False
False
看起来这个问题没有答案!
编辑:
糟糕! Rob指出我们忘记了:
1 < -(1 == 3) > 4
1 < -False > 4
1 < 0 > 4
1 < 0 and 0 > 4
False and False
False
答案 2 :(得分:1)
3>4
给出False
。
-1 == False
给出False
。
1 < False
给出False
。
因此,
1 < -1 == 3 > 4
变为False
。
给出适当的括号,使语句在语义上正确。
(1 < -1) == (3 > 4)
答案 3 :(得分:0)
(1 <-1)==(3> 4)
False == False
是