我真的學會python了嗎?在寫這篇部落格前,我問我自己
本來覺得python簡單,就很少去糾結python語法的細節
直到今天,發現了自己c語言思維慣性導致的bug
這個bug產生的主要原因是對於python運算子or的理解
特地寫下這篇部落格,解釋一下python中or和c語言中||的不同
先看python**,
i = 1
if i == (2 or 3 or 1):
print("yes")
else:
print("not")
你覺得結果是什麼呢,按c語言的思維套路,當然是輸出yes了
但是結果是not
我一開始以為是自己c語言學忘記了,才出現這個錯誤,特地去c語言裡驗證了一下
由於pycharm不能編譯c檔案,我只好用實驗室的伺服器了。。。
先通過vim新建乙個c檔案
vim test.c
按a進入插入模式
輸入
#include int i = 1;
void main()
按esc ,在按:wq儲存退出
命令列中輸入
gcc test.c -o test1
生成可執行程式test1
我本以為,這裡的c語言和上面的python在邏輯上是一樣的。。。
但是,通過
./test1
執行的結果是yes,
這就有些神奇了。。。至少說明我c語言的邏輯。。。還沒有忘記。。。
通過查閱資料,發現python的or
和c的||不太一樣
具體規則如下
宣告a=10,b=20
x or y
布林"或" - 如果 x 是 true,它返回 x 的值,否則它返回 y 的計算值。
(a or b) 返回 10。
所以在執行if i == (2 or 3 or 1):的時候
他會先計算2 or 3,結果為2,再計算2 or 1,結果為2,最後才是i == 2
當然輸出的是not
順便掛上and,not的具體規則
宣告a=10,b=20
運算子邏輯表示式
描述例項
andx and y
布林"與" - 如果 x 為 false,x and y 返回 false,否則它返回 y 的計算值。
(a and b) 返回 20。
orx or y
布林"或" - 如果 x 是 true,它返回 x 的值,否則它返回 y 的計算值。
(a or b) 返回 10。
notnot x
布林"非" - 如果 x 為 true,返回 false 。如果 x 為 false,它返回 true。
not(a and b) 返回 false
**參考菜鳥教程
SQL 以面向集合的思維方式來思考
圖4 1給出了12張卡片,從中你應該可以找出6個集合。每張卡片左上角的字母表示顏色 r 紅色,g 綠色,p 紫色 試試吧。答案在本章的最後 可別作弊哦!我首先給出第乙個集合 第1行第2列 實心綠色花體 第3行第2列 實心紅色花體 和第3行第4列 實心紫色花體 這個遊戲迫使你按集合來思考,除此以外別無...
c語言 指標的思考
面向指標程式設計 好文!對於指標的思考。理解 指標本身是乙個變數,有值 就是他本身的記憶體位址 指標可以指向別的位址。指標動態申請記憶體,就像在乙個位址上面蓋房子,就算被free掉,也只是這個房子被掀了,並不代表他本身所具有的位址變成了null。結構體指標實際上就是乙個指標,指向了結構體裡面的內容,...
用C語言的思維寫彙編
在c語言中 常量資料 函式 int main在彙編中 data segment 常量資料 data ends code segment assume cs code,ds data main 邏輯 和執行中變數資料 mov ax,4c00h int21h 函式 code ends end mainc...