簡體   English   中英

評估Python中比較運算符的行為

[英]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. -1之前有一個開放的paren。

  2. -1之間有一個開放的括號。

  3. 在其他任何地方都有開放式的父母。

這三種情況代表括號的所有可能位置。

在第一種情況下,我們有1 < ( ... ) ,其中省略號是布爾表達式。 由於1不小於TrueFalse ,因此整個表達式為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM