[英]Evaluation of comparison operators in Python behaving unexpectedly
我本學期正在使用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。 我在Python和C / C ++中看到了這個問題比較運算符的優先級 ,該表達式的結果對我來說很有意義。 但是在這種情況下,我不得不在評估表達式的其余部分之前先評估后一個語句,所以我不明白為什么我仍然得到錯誤的答案。
在過去的一個小時里,我一直在盯着它看,感覺好像我可能忽略了一些明顯的事情。 如果有人可以提供關於什么是正確解決方案的見解,將不勝感激。
任務證明是不可能的。 考慮以下三種情況:
-1
之前有一個開放的paren。
在-
和1
之間有一個開放的括號。
在其他任何地方都有開放式的父母。
這三種情況代表括號的所有可能位置。
在第一種情況下,我們有1 < ( ... )
,其中省略號是布爾表達式。 由於1
不小於True
或False
,因此整個表達式為False
。
在第二種情況下,我們有1 < -( ...)
,其中省略號是布爾表達式。 由於1
不小於-True
或-False
,因此整個表達式為False
。
在第三種情況下,我們有1 < -1 == ...
由於鏈接運算符的表達式的所有分支都必須為True,並且由於1 < -1
為False,因此整個表達式為False
。
因此,在每種可能的情況下,結果都是False。
您的方向正確,但是由於比較鏈的原因,您將擁有:
1 < -1 == (3 > 4)
1 < -1 == False
1 < -1 and -1 == False
False and False
False
注意,我們不評估從左到右的第二行,而是將兩個比較與and鏈接在一起。
只有幾種有效的方法為此添加一對括號,因此我們可以輕松地檢查所有其他括號:
(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
3>4
給出False
。 -1 == False
給出False
。 1 < False
給出False
。 因此, 1 < -1 == 3 > 4
變為False
。
給出適當的括號以使該語句在語義上正確。
(1 < -1) == (3 > 4)
(1 <-1)==(3> 4)
假==假
真正
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.