Day 03 變數、型態、運算子:你的除法不是你的除法
註:本篇文章同步刊載於iT邦幫忙,為鐵人賽之系列文章。
https://ithelp.ithome.com.tw/articles/10237877
從前從前,有個聰明的小男孩叫高斯,
有天老師有事情要忙,出了一道算術題給全班慢慢寫:
1+2+3+…+100 = ?
誰知道高斯馬上就將這個題目用簡單的乘法給迅速算出來了,
答案是(1+100) * 100 / 2 = 5050。
*這告訴我們,做人不要太白目XD *
以下我們使用上一篇文章的直譯器,來試看看Python的計算。
在Python中的四則運算,基本上跟我們所認知的四則運算大部分相同,
那麼,要在Python中計算上面的式子的話,也許你會想這樣寫:
| |
咦?為什麼多一個小數點呢?
事實上,Python中在計算加減乘除的時候,只有除法比較特別,
當使用單斜線的除法時,計算結果會預設帶有小數點,
這種「型態」和原先的整數不同,
在Python中整數稱作int,而帶小數點的數字則稱為float。
所以說,你的除法不是你的除法XD
要取得相除的整數,請使用雙斜線:
| |
留意如果這當中你使用了帶小數點的數字,即便使用雙斜線,仍然會得到float的結果。
| |
(註:和Python不同,其他如Java/C++等語言,單斜線反而是取整數)
一般Python常見運算方式,除了加減乘除和整數除法外,
還有幾個常見的如**% (取餘數運算子,如5 % 2會得到1)**
\ (取冪次,如a\b會得到a的b次方)
以及其他很多有的沒有的東西,以後我們有機會用到的時候再行介紹XD
剛剛提到了型態(type) ,在Python中每個資料都有其型態,
用來表明它是什麼種類的東西,我們可以使用type() 的方法,
簡單列出一些常見的型態:
| |
回到我們的1加到100,
上面的公式我們知道,在國小的時候通常被稱為梯形公式 :
(上底 + 下底) * 高 / 2
在1加到100中,由於下底和高相同,所以才會都是100,
那麼今天如果連續要算不同的梯形面積呢?每次重複寫好像有一點點麻煩,
這時候我們可以先將這三個不同的東西寫成「變數」。
所謂的變數就是會變的數(廢話)
讀者可以想像成一個箱子,這個箱子將用來存放資料,
並且為了知道我們在找哪個箱子,我們會為它貼上標籤並取名。
舉例來說:
| |
「變數名稱 = 值」的意義是將等號右邊的值(也可以是運算式),
存放到貼有等號左邊標籤的箱子中。它並不是我們數學中的兩者相等
讀者可以嘗試,如果這時候將bottom改變的話,計算結果應該也會改變:
| |
請讀者留意,前面執行bottom=100時,
我們生成了一個名為bottom的變數,
後面執行到bottom=200時,則是生成另一個變數,
再將bottom這個標籤貼到上面去。
在Python中更動內容這件事情相對來說十分自由,
即便現在bottom是整數,
你仍然可以透過前面的賦值來改變成別的東西。(因為這是新的東西)
(如上面最後就改成字串了)
同時,當我們將兩個變數用等號相連時,
只相當於將標籤名稱貼到同一個箱子上。
| |
講到這邊好像有點多吼?會不會難消化呢?
再加一點點就為今天做個收尾吧!
我們剛剛學到了變數、型態、及運算子,
假設你是班代,要幫系上同學訂書收錢,跟小明收300,跟小華收500……
這時候,你希望有一個變數能夠儲存收款的狀況。
對於第一筆款項也許你會這樣寫:
| |
但太麻煩了,你要寫兩次total,有沒有簡單一點的寫法呢?
有的,那就是「+=」。a += b的效果,等同於a = a + b。
| |
假定你收完了錢,廠商跟你說我們這次沒有特價了,
所以書錢變為兩倍(WTF?):
| |
上面這類型的運算子稱之為指定運算子 ,
可以達到省略多寫一次第一個變數的目的,看起來比較簡潔。
+=, -=, \*=, /=, //= …… 讀者可以自行運用。
特別強調,a = a + b的意義,
是將a + b算完後,置入到貼有a標籤的箱子,
請不要將其當成一般數學意義的等號來看待。
我們來做個練習吧!
假設圓周率為3.14,一個圓的半徑是7.77
請用上面的所學及print()方法,
在直譯器中印出該圓的周長和面積。
(註:print()內可以放計算式子呦!)承1,如果有另外兩個圓的半徑分別是5.3和2.5,
請計算出這三個圓的周長的和和總面積。
那就明天見囉!
工商時間:
抽獎活動還在繼續累積人數(現在好像沒有人想抽XD)
在Python Taiwan的連結第100篇的文章 底下,
公開分享到你的臉書、按讚該篇文章、並留言告訴我說,
「你最喜歡這一整個系列的哪一篇?為什麼?」或
「除了從LeetCode學演算法系列以外,
你還想要看到關於什麼方向的文章?」
超過20則留言的話 (有完成以上步驟的才算),我們就抽一組
「從Leetcode學演算法|進階篇」+「從Leetcode學演算法|面試篇」
課程的免費兌換券進行贈送!
期限嘛…就延長到滿人數吧XDD (不然也沒辦法哈哈)
容筆者工商一下,
「從Leetcode學演算法|進階篇」 開放預購啦!
這次選了40道難度加深的LeetCode題目,
同樣也會細部解說對應的技巧及須要掌握的演算法!
同時這次購買進階篇的話,
額外還加贈**「從Leetcode學演算法|面試篇」** !
當中包含了面試準備須知分享 ,及訪談國內外不同經驗的工程師 ,
讓你不論是想走前端/後端/一般軟工 或者是想找國外的工作 ,
是初學想轉職 還是正在工作 ,都能夠從中得到收穫呦!
有興趣的朋友可以使用下面的早鳥優惠~
「從Leetcode學演算法|進階篇」+「從Leetcode學演算法|面試篇」 :
https://bit.ly/advleetcode
「從Leetcode學演算法」全套(基礎/進階/面試篇)同捆優惠:
https://bit.ly/allleetcode
