[問題] print(3>2 is True) >>>False ?

看板Python作者 (薯)時間4年前 (2019/08/04 15:26), 編輯推噓2(2024)
留言26則, 4人參與, 4年前最新討論串1/1
各位大大午安 我今天開始學python這個程式語言 看到範例 flag = 3 > 2 print(flag) print(flag is True) >>> True >>> True 這邊沒問題 但是把flag這個變數拿掉直接寫 print(3>2 is True) >>> False 本來我以為是型態的問題 print(2 is True) >>> False 但是 print(type(3 > 2)) >>> <class 'bool'> 然後而我的Python版本是3.7的,應該也沒有所謂的改變True和False本身的值的問題 到底為什麼 print(3>2 is True) >>> False 呢? 感謝各位的閱讀 -- If a child on the street who has nothing is willing to share, why are we who have everything still so greedy? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.227.117 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1564903562.A.2FE.html

08/04 15:54, 4年前 , 1F
因為is先於> ,同階由左而右。
08/04 15:54, 1F

08/04 15:55, 4年前 , 2F
python operator precedence
08/04 15:55, 2F

08/04 16:10, 4年前 , 3F
print(2 is True) >>> False 原式變成print(3> False)
08/04 16:10, 3F

08/04 16:11, 4年前 , 4F
又偏偏是True 而不是False 何解?
08/04 16:11, 4F

08/04 16:11, 4年前 , 5F
前面由左而右,指同一階運算子同時出現時,位在左邊的
08/04 16:11, 5F

08/04 16:12, 4年前 , 6F
運算子先處理。不是在式子出現同階時,由左而右
08/04 16:12, 6F

08/04 16:14, 4年前 , 7F
g官方的Operator precedence吧
08/04 16:14, 7F

08/04 16:26, 4年前 , 8F
原式3>2 is True依據precedence變成3>(2 is True)
08/04 16:26, 8F

08/04 16:34, 4年前 , 9F
另外int(False)結果為0,所以最終結果就出來了。
08/04 16:34, 9F

08/04 16:37, 4年前 , 10F
啊我懂二樓的疑問了
08/04 16:37, 10F

08/04 16:52, 4年前 , 11F
抱歉 我剛看了原文,上面的解釋好像不對 Orz
08/04 16:52, 11F

08/04 17:11, 4年前 , 12F
3 > 2 and 2 is True
08/04 17:11, 12F

08/04 17:12, 4年前 , 13F
類似的有3 > 2 in {True}
08/04 17:12, 13F

08/04 18:37, 4年前 , 14F
所以請問甚麼狀況下 要判斷多出一個and ?
08/04 18:37, 14F

08/04 19:04, 4年前 , 15F
我猜3>2應該是個operation所以不是boolean 所以不是True
08/04 19:04, 15F

08/04 19:04, 4年前 , 16F
你加個括號或運算後才會得到boolean
08/04 19:04, 16F

08/04 19:05, 4年前 , 17F
是說寫這麼多年還真沒遇到這情況.....原po真厲害
08/04 19:05, 17F

08/04 19:09, 4年前 , 18F
例如你用 (3<5) == 3<5 也會是False
08/04 19:09, 18F

08/04 19:09, 4年前 , 19F
而((3<5) == 3)<5 跟 (3<5) == (3<5) 都是True
08/04 19:09, 19F

08/04 19:10, 4年前 , 20F
總之想保險又避免混淆好閱讀 加括號就對了
08/04 19:10, 20F

08/04 19:16, 4年前 , 21F
in, not in, is, is not, <, <=, >, >=, !=, ==
08/04 19:16, 21F

08/04 19:17, 4年前 , 22F
這些結合時都是這樣
08/04 19:17, 22F

08/04 19:18, 4年前 , 23F
為了讓0 < x < 1這種表達式符合直觀
08/04 19:18, 23F

08/04 19:20, 4年前 , 24F
或是'a' in 'ab' in 'abc'這類
08/04 19:20, 24F

08/04 19:36, 4年前 , 25F
懂樓上意思了 原來如此@@
08/04 19:36, 25F

08/04 19:38, 4年前 , 26F
所以 3 > 2 == 2 就會是True, 因為是看成3 > 2 and 2 == 2
08/04 19:38, 26F
文章代碼(AID): #1THeYAB- (Python)