bigdecimal判断大于零_Python零基础入门(七):运算符
點擊藍字 一起劃水
Review:
Python零基礎入門(一):對Python的簡單認識
Python零基礎入門(二):字符串基礎
Python零基礎入門(三):字符串進階
Python零基礎入門(四):輸入輸出
Python零基礎入門(六):數字
中間好像少了什么的亞子
好吧,其實是我記錯了,我以為上次應該從六開始,直接把五扔下了
為了保證順序的一致性,我決定把五撂過去,接著上次的六后面開始
零、目標
1.算數運算符2.比較運算符3.賦值運算符4.邏輯運算符5.成員運算符6.身份運算符*7.位運算符**為選看,不是重點看起來種類很多,但是一敲代碼發現這些東西都是非常簡單的,并沒有想象中那么難。“紙上得來終覺淺,絕知此事要躬行”這句詩說的就這個道理吧。一、算數運算符其實我們前面接觸過挺多算數運算符的。
| + | 加法運算 |
| - | 減法運算 |
| * | 乘法運算 |
| / | 除法運算,返回浮點數 |
| // | 取整的除法運算(去尾法) |
| % | 取模運算(求余運算) |
| ** | 冪運算,a**b等價于a的b次方 |
Examples:
需要注意的是,這里的乘號"*"在運算中是不可省略的。
數學中我們可以講很多參數寫在一起來表示相乘,但是不可以在編程中這樣寫。比如說,我們都知道:
但是在程序設計中,4ac的乘號不能省略,Δ也應該用符合規則的變量名去替代。delta = b ** 2 - 4 * a * c二、比較運算符| == | 比較兩個數是否相等 |
| != | 比較兩個數是否不等 |
| > | 比較前者是否大于后者 |
| < | 比較前者是否小于后者 |
| >= | 比較前者是否大于等于后者 |
| <= | 比較前者是否小于等于后者 |
每一個都在比較兩個數是否xxx,所以如果結果為“是”則返回True,結果為“否”返回False,True和False都是布爾(bool)類型變量,不知道你是否還記得呢?
三、賦值運算符前面也提到過,在數學上,x=x+1中的是“等于”的意思,而在編程語言中,"="是“賦值”的意思,將"="右邊的值賦值給"="左邊。
所以,x=x+1在數學上是無解的,或者是不成立的,但是在編程語言中,表示的是將變量x做了加1的操作。
| = | 賦值運算符,計算右側的值,然后賦給左邊 |
| += | 加法賦值運算符,a+=b等價于a=a+b |
| -= | 減法賦值運算符,a-=b等價于a=a-b |
| *= | 乘法賦值運算符,a*=b等價于a=a*b |
| /= | 除法賦值運算符,a/=b等價于a=a/b |
| //= | 整除賦值運算符,a//=b等價于a=a//b |
| %= | 求余賦值運算符,a%=b等價于a=a%b |
| **= | 冪賦值運算符,a**=b等價于a=a**b |
Examples:
上面也僅僅是選取了一部分賦值運算符作為例子,剩下的還是要自己多多使用。
賦值運算符還有一個很高級的用法,就是對多個變量同時賦值。
學習C語言的同學一定寫過或者間接用過這個函數:
void swap(int a, int b){ int temp = a; b = a;????a?=?temp;}或者是這樣:(我個人更常用位運算,總覺得能節省空間和時間)
void swap(int a, int b){????a?=?a?^?b;??// "^"表示按位異或 b = a ^ b; a = a ^ b;}沒學過C語言的小問號可能會問:這個東西是干嗎用的呀?
這個東西是用來將兩個變量的值互換的。
在高中數學課本里的算法部分提到了兩個求最大公約數的非常神奇的算法:輾轉相除法和更相減損術。
我們以更相減損術為例。
可半者半之,不可半者,副置分母、子之數,以少減多,更相減損,求其等也。以等數約之。
《九章算術》(懶得寫現代漢語算法了,古文也是可以讀的)里面“以少減多”會涉及到變量的互換。比如a和b是兩個參與運算的數字,剛開始的時候a>b。如果我們操作a-=b,操作完之后如果a>b,則繼續a-=b,如果ab。這個時候只需要一句:a, b = b, a就可以啦!
友情提供算法函數*
# greatest common divisor#?We?assume?that?a?>?b.def gcd(a, b): reduction = 1 while True: if not (a & 1 or b & 1): # 可半者半之 a //= 2????????????b?//= 2 reduction *= 2 else:????????????#?不可半者 break while True:????????#?副置分母、子之數,以少減多????????a?-=?b??#?更相減損,求其等也 if a == b: return a * reduction else: if a < b:????????????????a,?b?=?b,?a??#?交換變量這通操作是不是有點看傻了呢?
代碼看不懂沒關系,大學的應該用不到,高中的遲早也要學(指算法),里面的很多知識都會在后面講到的。現在看不懂的def、if、else、not、&都會講的。
四、邏輯運算符這個東西在高中就見過了。
| and | 邏輯“與” | p∧q |
| or | 邏輯“或” | p∨q |
| not | 邏輯“非” | ﹁p |
總的來說,就是:
邏輯“與”:p和q都為True,則(p and q)為True;其他情況,(p and q)全為False。
邏輯“或”:p和q都為False,則(p or q)為False;其他情況,(p or q)全為True。
邏輯“非”:p為True,not p就是False;p為False,not p就為True。
示例就是剛剛的更相減損術,在第六行有所體現:
# greatest common divisor# We assume that a > b.def gcd(a, b): reduction = 1 while True:????????if?not?(a?&?1?or?b?&?1): a //= 2 b //= 2 reduction *= 2????????else: break????while?True: a -= b if a == b: return a * reduction else: if a < b: a, b = b, a第六行我之所以加括號是擔心運算符之間混淆。
我們令a & 1為p,b & 1為q,這一行就是not (p or q)。
如果不加括號的話,你可能會擔心not p or q會被解釋為(not p) or q。
因為我沒有記憶計算符的優先級,所以我加了括號。
五、成員運算符成員運算符為"in",用來判斷某個值是否在某個序列中出現。
有則返回True,沒有則返回False。
Examples:
當然,也有not和in的搭配,也很常用。下面是一個代碼片段:
if name not in name_list:????print("此人不在名單中")else: print("此人在名單中")六、身份運算符*身份運算符為is。
我們曾介紹過id(),當時是用它來查看變量內容所在的小房間號。
這里的is所做的事情就是判斷兩個變量的內容是否在一個小房間里的。
a is b就等價于id(a)==id(b),這兩個表達式都會返回一個布爾值,用來表明該表達式的對與錯。如果a與b所在的內存地址相同,則返回True,否則返回False。對于入門來說,了解關于is的以上使用說明就足夠了,其實不了解也沒問題。
本部分接下來的內容有點難以理解,大可跳過。
上面這段代碼中,我在內存(房子)中開辟了一塊內存空間(小房間),用來存儲字符串“huaji”,然后讓變量a與b都指向這一塊內存空間。并不是我們想象的那樣——分別開兩個房間,里面放的都是"huaji"。
這樣做的好處就是節省內存。
我們再換一個數字試試看:
這和上面的的字符串的解釋基本一樣,只需將上圖中的"huaji"換成數字1即可。
但是,并不是所有的字符串和數字都是這樣的。
究其原因,是因為Python中設置了一個“小整數對象池”。
整數在程序中的使用非常廣泛,Python為了優化速度,使用了小整數對象池, 避免為整數頻繁申請和銷毀內存空間。
IDLE對小數值整數的定義是 [-5, 256],小整數字符串是只包含字母、數字、下劃線的字符串, 這些整數對象是提前建立好的,不會被垃圾回收,一個相同的值,永遠對應同一個內存地址。
詳情請見:
https://blog.csdn.net/BGONE/article/details/93311990?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase也可以用"is not"搭配。此時,a is not b等價于id(a) != id(b)。
七、位運算符*入門的盆友們可以直接略過此部分。
涉及到的數字都會被轉換為二進制數字時候按位運算。
"&":按位與運算——對應位全1得1,其他得0
"|":按位或運算——對應位全0得0,其他得1
"^":按位異或運算——對應位相同得0,不同得1
"~":按位取反運算——1變0,0變1
學過大學計算機的同學應該還記得原碼、反碼、補碼這幾個比較讓人頭大的東西。我們這里以二進制數1010為例,也就是十進制的10。1010在計算機中是以00001010(補碼)存儲的,~00001010=11110101,首位為1,說明是個負數,我們要用11110101求這個負數,也就是為一個補碼求逆。步驟:1.先減一得到反碼:11110100
2.除符號位以外取反得到原碼:10001011
3.轉換,得到數字:-11
了解原理后,我們可以很容易得到一個公式:~x =?-(x+1)
"<
例如:3 << 2
3的二進制表示為00000011,左移兩位為00001100,也就是十進制的12。
在數字沒有溢出的前提下,對于正數和負數,左移一位都相當于乘以2的1次方,左移n位就相當于乘以2的n次方。">>":右移運算——按二進制形式把所有的數字向右移動對應位移位數,低位移出(舍棄),高位的空位補符號位,即正數補零,負數補1。右移一位相當于除以2,右移n位相當于除以2的n次方,結果取整數。
來點創造性的思考,自己去IDLE里試試看有沒有">>="、"<<="、"&="、"|="、"^="這樣的賦值號。
我也是寫到這里突發奇想,因為前面也是雙目運算符(對兩個數字操作的運算符)和賦值號結合形成一個新的賦值號,這里的很多運算符也是雙目運算符(除了"~")。
總結
以上是生活随笔為你收集整理的bigdecimal判断大于零_Python零基础入门(七):运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django外调用url_Django:
- 下一篇: python的爬虫库_python做爬虫