1. 程式人生 > 實用技巧 >第006講:Python之常用操作符

第006講:Python之常用操作符

一 python的常用操作符

1 算術操作符:加+ 減 - 乘* 除 / 取餘% 冪運算** (floor 除法,被小甲魚稱為地板除)//

注意:python3中整數間做除法(/)運算會得到精確的運算結果,不會像其他語言一樣因為資料型別的限制而捨棄掉小數部分

為了像其它語言一樣,對整數間除法的運算結果做向下取整的操作,python3引入了(//),不過該操作符對浮點數的運算結果也會進行向下取整的操作。

eg:10 // 8 =1 ; 3.0 // 2 =1.0 ; 3 / 2 = 1.5

2 比較操作符: 小於< 小於等於<= 大於> 大於等於>= 等於 == 不等於!=

3 邏輯操作符:與and 或or 非not

eg:3<4<5 = True (該語句實際上被解釋為(3<4)and(4<5),其它語言裡面是不允許這麼寫的)

二 優先順序問題

  • 從高到低:冪運算>正負號>算術操作符(先乘除後加減)>比較操作符>邏輯運算子(not>and>or)
  • 冪運算操作符比其左側的一元操作符優先順序高,比其右側的一元操作符優先順序低; eg -3 ** 2 = -9 (即- (3 ** 2));4 ** -2 =0.0625 (即 4 ** (-2))

三 操作符分類

1 一元(單目)操作符:一個運算元 取反-

2 二元(雙目)操作符:兩個運算元 + - * / ** // 比較操作符 邏輯操作符

四 課後作業

(一) 測試題答案

0. Python 的 floor 除法現在使用 “//” 實現,那 3.0 // 2.0 您目測會顯示什麼內容呢?
如果回答是 1.5 那麼很遺憾,您受到 C 語言的影響比較大,Python 這裡會義無反顧地執行 floor 除法原則,答案是:1.0

1. a < b < c 事實上是等於?
(a < b) and (b < c)

2. 不使用 IDLE,你可以輕鬆說出 5 ** -2 的值嗎?
0.04,也就是 1/25
冪運算操作符比其左側的一元操作符優先順序高,比其右側的一元操作符優先順序低。

3. 如何簡單判斷一個數是奇數還是偶數?
使用求餘可以簡單得到答案:能被 2 整除為偶數,所以 x % 2 == 0,否則為奇數。


4. 請用最快速度說出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
如果你的回答是 0,那麼小甲魚很開心你中招了!
答案是:4 # 我開開心心的寫了一個1
not or and 的優先順序是不同的:not > and > or
我們按照優先順序給它們加上括號:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
== 0 or 0 or 4 or 6 or 9
== 4
為啥是 4?
大家還記得第四講作業提到的“短路邏輯”嗎?3 and 4 == 4,而 3 or 4 == 3。
所以答案是:4
溫馨提示:為了更好的表達你的程式,小甲魚再次呼籲有些括號還是不能省下的,畢竟不是所有程式設計師都跟你一樣都將優先順序爛透於心的。

5. 還記得我們上節課那個求閏年的作業嗎?如果還沒有學到“求餘”操作,還記得用什麼方法可以“委曲求全”代替“%”的功能呢?
因為上節課我們還沒有教大家“求餘”的操作,所以小甲魚使用了“if year/400 == int(year/400)”這樣的方式來“委曲求全”。

(二) 動動手答案

0. 請寫一個程式打印出 0~100 所有的奇數。

i = 0
while i <= 100:
    if i % 2 != 0:
        print(i, end=' ')
        i += 1
    else:
        i += 1

1. 我們說過現在的 Python 可以計算很大很大的資料,但是......真正的大資料計算可是要靠剛剛的硬體滴,不妨寫一個小程式碼,讓你的計算機為之崩潰?

print(2 ** 2 ** 32)

# 一般很多機子都會在一會兒之後:Memory Overflow,記憶體不夠用。
# 設計到冪操作,結果都是驚人滴。

你猜猜為何 print( (2 ** 2) ** 32) 就可以計算出結果呢?

因為冪運算是從右向左運算的

2. 題目:請程式設計求解該階梯至少有多少階? ——我自己不會做

x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag = 1
    else:
        x = 7 * (i+1) # 根據題意,x一定是7的整數倍,所以每次乘以7
    i += 1

if flag == 1:
    print('階梯數是:', x)
else:
    print('在程式限定的範圍內找不到答案!')